『Scheme手習い』読書会 第11回
『Scheme手習い』読書会の11回目です。範囲としては8章頭(P126)〜8章途中(P135)です。
今日は、友人と時間が合わないため一人での読書会です。
8章はどうやら高階関数を主題にしているようですね。せっかくの関数型言語ですから、高階関数をバリバリ使っていきたいですね。
- 8章 究極のlambda
- eq?やequal?を関数の引数に渡すことができる。
- 関数rember-fの定義:eq?を使用していた比較部分を引数test?として受け取る。
- 関数eq?-cの定義:関数を返す関数である。
- 関数eq?-saladの定義:eq?-cを使用して定義する。
- 関数rember-fの再定義:test?を取り、関数を返す形に修正する。
- 関数rember-eq?の定義:rember-fとeq?を使用して定義する。
- 無名関数の使用。関数rember-eq?は、名前を付けなくても使用できる。( (rember-f test?) a l)
- 関数insertL-f,insertR-fの定義:insertL,insertRをtest?を取る形に修正する。練習。
- 関数insert-gの定義:insertL,insertRの違いを補助関数により吸収し、補助関数を引数に取るようにすることで汎用化する。
- 補助関数seqL,seqRの定義:左側に追加する(insertL)か、右側に追加する(insertR)かの違い。
- seqL,seqRは定義せず、そのまま渡しても良い。(lambda (new old l) (cons new (cons old l)))。
- 関数substの定義:insert-gで手軽に定義。補助関数としてseqSを定義(しなくても作成可能)。
- 関数remberの定義:insert-gを使用して定義。insert-gはリストを走査し、一致した要素を操作する関数なので汎用性が高い。
今日はこのあたりまでで良いでしょう。10ページほどしか進んでいませんが、内容としては比較的濃いと思います。続きはまた明日。