微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 Scheme 中柯里化平方和函数

如何解决在 Scheme 中柯里化平方和函数

我试图在 Scheme 中对 4 个参数的函数进行柯里化。这就是我的 curry 函数输出应该是 30。请帮助我使用 curry4 函数

(define sum-of-squares
  (lambda (a b c d)
    (+ (* a a) (* b b) (* c c) (* d d))))

(define curry4
  (lambda (a b c d)
    (apply sum-of-squares (a (b (c (d)))))))

(((((curry4 sum-of-squares) 1) 2) 3) 4)

解决方法

您可以尝试以下方法:

(define (((((curry-4 func) a) b) c) d)
  (func a b c d))

请注意,这是扩展它的特殊语法,例如:

(define (curry-4 func)
  (λ (a)
    (λ (b)
      (λ (c)
        (λ (d) (func a b c d))))))

我们在这里所做的是返回一个 lambda,该 lambda 返回一个 lambda ...... 返回一个 lambda,该 lambda 返回应用 func 的结果。本质上,我们一次只接受一个参数,一旦我们拥有所有参数,我们就可以返回最终值。在那之前,我们返回一个仍在等待其余参数的函数。

,

在 Racket 中只需使用 curry。您可以在 DrRacket 中查看定义文件。

#lang racket
(define (f n1 n2 n3 n4)
  (apply +
         (map (λ (x) (expt x 2))
              (list n1 n2 n3 n4))))

(((((curry f) 1) 2) 3) 4)

手工咖喱。

#lang racket
(define curry-by-hand-f
  (lambda (x1)
    (lambda (x2)
      (lambda (x3)
        (lambda (x4)
          (f x1 x2 x3 x4))))))

((((curry-by-hand-f 1) 2) 3) 4)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。