Scheme定义/ lambda简写

Cam*_*Cam 6 lambda scheme

在Scheme中,如何在我的define中使用define/lambda简写来嵌套lambda表达式?

例如,给出以下程序......

(define add
  (lambda (num1 num2)
    (+ num1 num2)))
Run Code Online (Sandbox Code Playgroud)

人们可以缩短它:

(define (add num1 num2)
  (+ num1 num2))
Run Code Online (Sandbox Code Playgroud)


但是,如何同样缩短以下功能?

(define makeOperator
  (lambda (operator)
    (lambda (num1 num2)
      (operator num1 num2))))

;example useage - equivalent to (* 3 4):
((makeOperator *) 3 4)
Run Code Online (Sandbox Code Playgroud)

sep*_*p2k 12

(define (makeOperator operator)
  (lambda (num1 num2)
    (operator num1 num2)))
Run Code Online (Sandbox Code Playgroud)

第二个lambda不能缩短.

(define (makeOperator operator) operator)如果您不想强制执行返回的函数只需要两个参数,那么您可以缩短它.

  • @incrediman:是的,他在谈论`(define(f.xs)...)`这将允许你用任意数量的参数调用f(例如`(f 1 2 3 4 5)`)和`xs `将是包含这些参数的列表. (3认同)

Mic*_*zyk 7

Scheme的一些实现 - 如Guile(使用1.8版测试)和MIT Scheme - 提供以下简写符号:

(define ((foo x) y) (+ x y))

(foo 5)
; => procedure
((foo 5) 3)
; => 8
Run Code Online (Sandbox Code Playgroud)

我相信这种符号在经典力学的结构和解释中被广泛使用.