R6RS:翻訳:R6RS:11.4.2 Procedures

R6RS:翻訳:R6RS:11.4.2 Procedures

11.4.2 手続き

(lambda <formals> <body>)

構文: <formals> は下で述べる形式仮引き数リストでなければならず、 <body> は R6RS:翻訳:R6RS:11.3 Bodies で述べたものでなければならない。

意味論: lambda 式は手続きに評価される。 lambda 式の評価された時に有効な環境は手続きの一部として記憶される。後になって手続きが引き数とともに呼び出されると、 lambda 式が評価されたところの環境が仮引き数リスト中の変数を新たな場所に束縛することで拡張され、引き数値の評価結果がその場所に格納される。それから、 lambda 式の本体部分(定義を含むこともあるため、 letrec* フォームを表現することもある。 R6RS:翻訳:R6RS:11.3 Bodies 参照)の式が拡張された環境で順番に評価される。本体部分の最後の式の評価結果が手続き呼び出しの結果として返される。

(lambda (x) (+ x x))              ⇒  a procedure
((lambda (x) (+ x x)) 4)          ⇒  8

((lambda (x)
   (define (p y)
     (+ y 1))
   (+ (p x) x))
 5)         ⇒ 11

(define reverse-subtract
  (lambda (x y) (- y x)))
(reverse-subtract 7 10)                 ⇒  3

(define add4
  (let ((x 4))
    (lambda (y) (+ x y))))
(add4 6)                                ⇒  10

<formals> は次のような形式をしていなければならない。

((lambda x x) 3 4 5 6)                  ⇒  (3 4 5 6)
((lambda (x y . z) z)
 3 4 5 6)                               ⇒  (5 6)

どの <variable> も <formals> 中に 2 度以上現れてはならない。


Last modified : 2008/04/02 01:00:55 UTC