Scheme定义/ lambda简写

时间:2010-05-31 16:54:11

标签: lambda scheme

在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)

3 个答案:

答案 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)