計算機プログラムの構造と解釈 第二版 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)
ということのようです。