SICP問題1.34
fの定義
(define (f g) (g 2))
(f f)の評価結果。
(f f) ; *** ERROR: invalid application: (2 2) ; Stack Trace: ; _______________________________________
考察。
(define (f g) (g 2))
は
(define f (lambda (g) (g 2)))
と表せる。すなわち引数で渡されたgに対し2を作用させる手続きとなる。
よって
(f square) (f (lambda (z) (* z (+ z 1))))
は、それぞれ
(square 2) ((lambda (z) (* z (+ z 1))) 2)
となる。
これに対し
(f f)
は
((lambda (g) (g 2)) 2)
になり 2 に 2 を作用させる動作を行おうとすることになるが、 2 は手続きでないため、エラーとなる。