簡體   English   中英

Scheme定義/ lambda簡寫

[英]Scheme define/lambda shorthand

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

我相信這種符號在經典力學的結構和解釋中被廣泛使用。

與上面的答案相反,第二個lambda 可以使用速記define表示法:

(define (makeOperator operator)
  (define (foo num1 num2)
    (operator num1 num2))
  foo)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM