在Scheme中求平方和函数
我试图在Scheme中实现4个参数的函数。这就是我的在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
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现在有了。