(define (proc-name args ...) body ...)
プロシージャを作成し、変数proc-nameにバインドします。この場合define
の値に変数を結合し、その値は手続きであることを起こる
(define proc-name
(lambda (args ...)
body ...))
ためabbrivationです。あなたが綴るしたい場合は、あなたのrandom
それは次のようになります。
(define random
(lambda (a b c x)
(lambda (a b c x)
(+ (* a (* x x)) (* b x) c))))
外に引数a
、b
、c
を取り、x
と手順も引数a
、b
、c
を取り、別の手順を返す手続きです、 x
は元のバインディングを効果的にシャドーイングし、次にそれらの表現をいくつか行います。それはあなたの手順では、一番上に短い形式を使用する必要がありますいずれかの手順を返すように仮定されなかった明白なので使用例は
((random #f #f #f #f) 4 2 9 3)
次のようになります。
(define (random a b c x)
(+ (* a (* x x)) (* b x) c))
または同等の非砂糖形式:
プロシージャにプロシージャを戻すだけでなく、プロシージャで使用される引数としてプロシージャを渡すことが一般的です。 Schemeは変数のバインディングがかっこで呼び出される前にプロシージャであるかどうか分かりません。何かを試してみると余分なかっこのようなルーキーミスが奇妙なエラー "application:(+ ab)not procedure"を返します。
リターンがプロシージャである例は、部分的なアプリケーションになります。
; makes a procedure that adds initial
(define (make-add initial)
(lambda (v) (+ initial v))
(define add-10 (make-add 10))
(define add-3 (make-add 3))
(add-3 2) ; ==> 5
(add-10 2) ; ==> 12