[英]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.