Scheme手習い Chapter 1 自分なりの理解、疑問点
自分なりの理解
- 最後に?が付く関数は#tか#fを返す
- carとcdrは空でないリストについてのみ定義される
- 空でないリストのcdrは常に別のリストになる
- consの引数は2つ、第2引数はリストでなければならない。結果はリストになる。
- 疑問点に書くべきかと思うけどこっちで。p8で「実際、すべての値aとbにうまく働いて」と書かれているが、第2引数がリストでない場合はリストが返るのか気になった。どうやらGaucheでは第2引数がリストでない場合はpairであってlistでないらしい。
- null?はリストに対してのみ定義される。(が実際、空リスト以外は偽になる。)
- eq?は2つの引数を取る。どちらも数でないアトムでなければならない。(が実際、数が来てもかまわない。)
- Q. carとcdrの由来
- Lispが実装された昔のマシン(IBM704)での用語
- car: Contents of the Address part of the Register
- cdr: Contents of the Decrement part of the Register
- 参考リンク1. Strange Names - Programming in Emacs Lisp
- 参考リンク2. carとcdrの現場 - .mjtの日記復帰計画
- Q. なぜS式?
- A. SはSymbolのS.
- Q. ググったんだけどS式以外にもM式ってあるらしい。M式って?
- A. MはMetaのM.
- Q. なぜSchemeはM式ではなくてS式?
- Q. なんでS式にはatomとlistしかないの?
- Q. predicateに?を付けるのはどの言語由来?
- Q. 実際consがどんなa bでもいいのは何故?
- Q. pairはLispの世界では一般的じゃないの?
- Q. 上でも書いたけどconsの第2引数がリストでない場合どうなるの?
- Q. eq?の引数に数でないアトムがこなければならない理由って何でしょうか?
- Q. 実装上の問題? シンボルや関数へのポインタ値と数を比べた時、同じになってしまう事があるから?