2009年6月29日月曜日

【フムフム本】7章 手続き


* 7章 手続き
** 7.1 手続きオブジェクト
** コラム lambdaの由来
- これは読んだ。
** 7.2 手続きを取る手続き
- 「Schemeがfor-eachを構文ではなく手続きとして提
供しているおかげで、このように他の手続きと組み
合わせてより高機能な手続きを作り出してゆくこと
ができるのです」納得。
- 練習問題
(for-each-numbers print '(1 2 #f 3 4 #t))

(define (for-each-numbers pred prlist)
(for-each pred (myfilter number? prlist)))

(map-numbers (lambda (x) (* x 2)) '(1 2 #f 3 4 #t))

(define (map-numbers pred prlist)
(map pred (myfilter number? prlist)))

((numbers-only map) (lambda (x) (* x 2)) '(1 2 #f 3 4 #t))

(define (numbers-only walker)
(lambda (fn prlist)
(walker fn
(myfilter number? prlist))))
** コラム for-eachとmapの引数の順序
- Shibuya.lisp#1のつっこみであったような。
** 7.3 ローカル変数
- letrecはCommon Lispのlabels的だが、letrecの方が
汎用的だ。
** 7.4 可変長引数を取る
- (define (func a b . c) ...)。Schemeの
lambda-listはパターンマッチング風味だ。
- 練習問題
(define (mylist . x)
x)
** コラム 構文の拡張とマクロ
- 特になし。
** 7.5 可変長引数を渡す
- あれ?P79の上のほうのappendはlengthを使っていな
いような。lengthが駄目だからこう書けってことな
のかな?
** 7.6 引数のパターンマッチング
- matchはやっぱり便利。PAIPのpat-matchは強力だが、
このmatchの方がhandyかも。
** コラム matchによる構文の分解
- なるほど。mit構文をネタに徐々にマクロに近づいて
いく。
** 7.7 省略可能引数とキーワード引数
- あ、Schemeにもキーワードってあるんだな(Gauche拡
張?)。ということはSymbolもあるんだっけ?
** 7.8 部分適用
- cut便利。構文糖衣、馬鹿にならないな。
** 7.9 多値
- 特になし。
*** 7.9.1 多値を受け取る
- receiveはCommon Lispのmulitiple-value-bindと同
じかな。
- let-values,let*-values便利。構文糖衣いいな。
SRFIってCommon Lispにも展開されているのかな。
*** 7.9.2 多値を返す
- Common Lispといっしょ。
** コラム 「Lisp脳」の謎に迫る - Schemeプログラマの発想
- listにしちゃえば自由自在、入出力は別途考える、と
いう感覚は常日頃あるけど、fizzbuzzはdoで書いちゃ
うかも。。。

おもしろいのでついついやりすぎた。
今日から業務なので、ちょっとずつにしなければ。

こつこつ。

0 件のコメント: