計算機プログラムの構造と解釈 第二版 P37 問題1.34

とりあえず、書いてある通りのソースコードを実行してみる。

  1 #!/usr/local/bin/gosh
  2 ;; -*- coding: utf-8 -*-
  3 
  4 (define (square a) (* a a a))
  5 
  6 (define (f g)
  7   (g 2))
  8 
  9 
 10 ;; main
 11 (define (main args)
 12 
 13   (display "(f square) : ")
 14   (display (f square))(newline)
 15 
 16   (display "(f (lambda (z) (* z (+ z 1)))) : ")
 17   (display (f (lambda (z) (* z (+ z 1)))) )(newline)
 18 
 19   (display "(f f) : ")(newline)
 20   (display (f f))
 21 
 22 0)

んで、実行するとエラーが出ます。

(f square) : 8
(f (lambda (z) (* z (+ z 1)))) : 6
(f f) : 
*** ERROR: invalid application: (2 2)
Stack Trace:
_______________________________________
  0  (f f)
        At line 20 of "././1-34.scm"
  1  (display (f f))
        At line 20 of "././1-34.scm"


問題になってる、20行目が悪いみたいですね。

(f f)の処理を追っかけてみる。


(f f)を実行すると、
(f 2)を実行することになる。
ということは、次に
(2 2)
を実行することになる。
(2 2)なんて実行できないので、

*** ERROR: invalid application: (2 2)

ということのようです。