参考URL、文献
アトムのリスト lat を再帰せしときは、2つの質問、
(null? lat) と else を行うべし。
数 n を再帰せしときは、2つの質問、
(zero? n) と else を行うべし。
S 式のリスト l を再帰せしときは、3つの質問、
(null? l) 、 (atom? (car l)) 、 else を行うべし。
リストを作るには cons を用いるべし。
リストを作らんとせしときは、最初の要素になるものを
記述し、しかる後にそれを自然なる再帰に cons すべし。
再帰のときは少なくとも1つの引数を変えるべし。
アトムのリスト lat を再帰せしときは、
(cdr lat) を用いるべし。
数 n を再帰せしときは、
(sub1) を用いるべし。
S 式のリスト l を再帰せしときは、
(null? l) も (atom? (car l)) も真でないならば、
(car l) と (cdr l) を用いるべし。
必ず最終条件に向かって変化すべし。
変化せし引数は、必ず最終条件でテストすべし。すなわち、
cdr を用いるときは、最後に null? で、
sub1 を用いるときは、最後に zero? でテストすべし。
+ で値を作らんとせしときは、行を終えるときに常に値として 0 を用うべし。
なんとなれば、 0 を加うるは加算の値を変えぬからなり。
× で値を作らんとせしときは、行を終えるときに常に値として 1 を用うべし。
なんとなれば、 1 を掛けるは乗算の値を変えぬからなり。
cons で値を作らんとせしときは、行を終えるときに常に値として () を考えるべし。
関数が正しいときのみ簡約化せよ。
性質を同じくするすべての構成部分について再帰すべし。すなわち、
- リストのすべての部分リストについて。
- 算術式のすべての部分式について。
表現から抽象化するに際し、補助関数を使用すべし。
(define value) を参照。
新しき関数においては共通のパターンを抽象化すべし。
同時に2つ以上の値を集める際には関数を作るべし。
数値などのように、データ型としてそれ以上分解できないもの
シンボル(要調査)以外のアトムを評価するとそれ自身が評価結果となる
┏ アトム──┬ 数値
┃ ├ 文字列
┃ ├ シンボル
┃ └ nil
┗ リスト
lispの構文そのもの
「道はnilを生ず、nilはアトムを生じ、アトムはS式を生じ、S式は万物を生ず」
(例)
(hogehoge)
(cdr '(sushi))
数のリストのこと。
(1 2 3 4 5)
リストの先頭要素を求める
先頭の要素を除いたリストを求める
先頭に要素を加えたリストを作る
条件分岐。上から順に実行される
(cond
((hogehoge) fugafuga)
((higehige) mogemoge)
(else #f))
6/18
最初は全然わからなかったが、数遊びの最後のあたりで再帰がなんとなく書けるようになってきた。
6/20
かなり複雑になってきた。この本を1度だけで読み終えてはいけない理由が少しわかった気がする。
6/20
7章集合論で草。
6/27
multiinsertLR&coの収集子関数がよくわからなかった。