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 は手続きでないため、エラーとなる。