在Scheme中,如何在我的define中使用define / lambda简写为嵌套的lambda表达式?
例如,给出以下程序......
(define add
(lambda (num1 num2)
(+ num1 num2)))
可以将其缩短为:
(define (add num1 num2)
(+ num1 num2))
但是,我怎样才能同样缩短以下功能?
(define makeOperator
(lambda (operator)
(lambda (num1 num2)
(operator num1 num2))))
;example useage - equivalent to (* 3 4):
((makeOperator *) 3 4)
答案 0 :(得分:12)
(define (makeOperator operator)
(lambda (num1 num2)
(operator num1 num2)))
第二个lambda不能缩短。
如果您不想强制执行返回的函数只需要两个参数,那么您可以将其缩短为(define (makeOperator operator) operator)
。
答案 1 :(得分:7)
Scheme的一些实现 - 如Guile(使用1.8版测试)和MIT Scheme - 提供以下简写符号:
(define ((foo x) y) (+ x y))
(foo 5)
; => procedure
((foo 5) 3)
; => 8
我相信这种符号在Structure and Interpretation of Classical Mechanics中使用了很多。
答案 2 :(得分:4)
与上述答案相反,第二个lambda
可以使用简写define
表示法:
(define (makeOperator operator)
(define (foo num1 num2)
(operator num1 num2))
foo)