計算機プログラムの構造と解釈 第二版 P43 問題1.41
問題を読む。
まー大丈夫そう。
必要な答えは、
1. doubleを定義する
2. (((double (double double)) inc) 5)がどういう値を返すか確かめる。
「1.」でdoubleの定義で迷うところは特になし。lambdaをつかえばいい。
「2.」の答えで、incという手続きも必要なので、それも定義する。
んで、値の予測としては、
二回の二回の二回ということで、(2^2)^2回 incを行うのかなと想定。
そうすると、入力パラメータに16を足して出力する関数が出力されるのかな?
ということで、ソース
#!/usr/local/bin/gosh ;; -*- coding: utf-8 -*- (define (inc x) (+ x 1)) (define (double f) (lambda (x) (f (f x)))) ;; main (define (main args) (display "(inc 1) : ") (display (inc 1)) (newline) (display "((double inc) 1) : ") (display ((double inc) 1)) (newline) (display "(((double (double double)) inc) 5) : ") (display (((double (double double)) inc) 5) ) (newline) 0)
実行!
(inc 1) : 2 ((double inc) 1) : 3 (((double (double double)) inc) 5) : 21
予測もあってたし、今日はゆっくり寝れそうです。