手続き
(define (f g) (g 2))
を定義したとする. その時
(f square) 4 (f (lambda (z) (* z (+ z 1)))) 6
解釈系に組合せ(f f)を(意地悪く)評価させるとどうなるか. 説明せよ.
問題文の手続きを定義して実行してみます.
手続きは次の通り.
(define (f g) (g 2)) (define (square x) (* x x))
実行結果は次のとおりです.
ようこそ DrRacket, バージョン 6.1 [3m]. 言語: Pretty Big; memory limit: 2048 MB. > (f square) 4 > (f (lambda (z) (* z (+ z 1)))) 6 > (f f) . . application: not a procedure; expected a procedure that can be applied to arguments given: 2 arguments...: 2 >
(f f)を評価するとエラーが生じています.
その理由を考えます.
手続きfの定義から(f f)を評価した場合の置き換えは次のようになります.
(f f) = (f 2) = (2 2)
「2」は手続きではないのでエラーが生じます.
0 件のコメント:
コメントを投稿