在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)
sep*_*p2k 12
(define (makeOperator operator)
  (lambda (num1 num2)
    (operator num1 num2)))
第二个lambda不能缩短.
(define (makeOperator operator) operator)如果您不想强制执行返回的函数只需要两个参数,那么您可以缩短它.
Scheme的一些实现 - 如Guile(使用1.8版测试)和MIT Scheme - 提供以下简写符号:
(define ((foo x) y) (+ x y))
(foo 5)
; => procedure
((foo 5) 3)
; => 8
我相信这种符号在经典力学的结构和解释中被广泛使用.