在Scheme中求平方和函数

在Scheme中求平方和函数,scheme,racket,computer-science,currying,Scheme,Racket,Computer Science,Currying,我试图在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-squa

我试图在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)

在球拍中,只需使用
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)

以下是您可以尝试的:

(定义
(职能a b c d))
请注意,这是一种特殊的语法,用于将其展开,如:

(定义(curry-4 func)
(λ(a)
(λ(b)
(λ(c)
(λ(d)(func a b c d()()))

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

最好使用一个列表,而不是固定数量的参数。。。这是为了一个类还是什么?这是一个实践问题。这没有提供通用的
curry-4
函数,所以这不能回答问题。@MLavrentyev现在有了。