2011年4月26日火曜日

Scheme手習い Chapter 2 自分なりの理解、疑問点



再帰きた再帰! ヒャッハー!

lat?の定義について

微妙な考えの違いが。本のがnotとかしてない分無駄がないように見えたり。
とりあえず本のコードはコメントアウトして自分で書いたのを使うようにしてみました。

p.23のmember?について
member?の定義の最初の質問の答えがnilとなっていたけどこれは偽かな?と思ったので修正して書きました。
非公式サポート情報の正誤表
があるようなので、なんか違うと思ったら見るようにします。

テストケースについて
再帰的に関数を呼びだしてる時、現在の値は?というのがいっぱい続いていて1つのケースの切れ目がわかりづらいかも。

再帰的な関数のデバッグの方法
本だと毎回呼び出した時の引数を書いてくれてる。
実際に実行する際も引数を見れた方がイメージつきやすい。
なのでデバッグの方法を調べてhigeponさんのところを参考にすると4つほどあるらしい
Gauche(Scheme) でデバッグをする4つの方法 - ひげぽん OSとか作っちゃうかMona-

  1. printデバッグ
  2. エラーポートに出力
  3. リーダーマクロ#?=を使う
  4. slibのtraceを使う

このどれかを使って呼び出される時の内容を見てみようと思います。
  • とりあえず読んでる時はソースに入れてしまって確認したら取り除いてコミット仕直しがいいかな?
  • trace等デバッグ用のコードは入れない方がいい?
  • デバッグ用のブランチを切る方がいいのかな?

名前に関する疑問
atomの略でa, latは何の略?、list of atomでList of ATomをとってるのかな?
;; lat?の引数がlなのはlistの略でしょうね、lat?に渡される引数がlatとは限らないためlat?の引数はlってことか!

関数定義について
func.scmに全部入れちゃうとだんだんでっかくなっちゃうかかな、という不安





Scheme手習い Chapter 2 自分なりの理解、疑問点

再帰きた再帰! ヒャッハー!

lat?の定義について

微妙な考えの違いが。本のがnotとかしてない分無駄がないように見えたり。
とりあえず本のコードはコメントアウトして自分で書いたのを使うようにしてみました。

p.23のmember?について
member?の定義の最初の質問の答えがnilとなっていたけどこれは偽かな?と思ったので修正して書きました。
非公式サポート情報の正誤表
があるようなので、なんか違うと思ったら見るようにします。

テストケースについて
再帰的に関数を呼びだしてる時、現在の値は?というのがいっぱい続いていて1つのケースの切れ目がわかりづらいかも。

再帰的な関数のデバッグの方法
本だと毎回呼び出した時の引数を書いてくれてる。
実際に実行する際も引数を見れた方がイメージつきやすい。
なのでデバッグの方法を調べてhigeponさんのところを参考にすると4つほどあるらしい
Gauche(Scheme) でデバッグをする4つの方法 - ひげぽん OSとか作っちゃうかMona-
  1. printデバッグ
  2. エラーポートに出力
  3. リーダーマクロ#?=を使う
  4. slibのtraceを使う

このどれかを使って呼び出される時の内容を見てみようと思います。
  • とりあえず読んでる時はソースに入れてしまって確認したら取り除いてコミット仕直しがいいかな?
  • trace等デバッグ用のコードは入れない方がいい?
  • デバッグ用のブランチを切る方がいいのかな?

名前に関する疑問
atomの略でa, latは何の略?、list of atomでList of ATomをとってるのかな?
;; lat?の引数がlなのはlistの略でしょうね、lat?に渡される引数がlatとは限らないためlat?の引数はlってことか!

関数定義について
func.scmに全部入れちゃうとだんだんでっかくなっちゃうかかな、という不安

2011年4月14日木曜日

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の由来
  • 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. 実装上の問題? シンボルや関数へのポインタ値と数を比べた時、同じになってしまう事があるから?