そろそろλ計算にはいりたいなーと思ってたのに、読むだけでおわった。
問1.32
sum(Σ)とproduct(Π)は2箇所しか変えなくていいという問1.31の答えは,二つが同じ構造をもっていることを意味しているということで、んじゃ、その同じ構造をくくりだしてみようというテスト。
(define (accumulate combiner null-value term a next b) (if (<= a b) (accumulate combiner (combiner null-value (term a)) term (next a) next b) null-value))
そうすると、sumやproductはたとえば以下のようにかける。
(print (accumulate + 0 self 0 inc 10)) (print (accumulate * 1 self 1 inc 6))
問1.34
(define (f g) (g 2))
というプログラムがあるときに
(f f)
とすると何が起きるんだろうというお話。なんかぜんぜんわかんない。実際にやってみたら
$ gosh problem1-34.scm gosh: "error": invalid application: (2 2)
ていうエラーになる。あれ、fが2になってるんだよなこれ。はて、どういうことか。
(f f)とした時点で、f=gが確定して、(f g)は(g 2)でbindされているから、(f 2)。fは(f g)=(f f)なのでf=2になって(2 2)?書いててもいみがわからない。