2011年5月8日日曜日

Scheme手習い Chapter 4

Chapter 3までは主にリストを再帰させてたけど今度は数の再帰。

自分の中でのまとめ
  • リストの時はリストが空かどうかを判定し再帰を終わらせるためにnull?を最初に質問したが、数で再帰する場合は再帰を終わらせるためzero?でゼロかどうか質問する。
  • 第5の戒律はわかりやすい。数で再帰する場合、再帰の終わりでは今までの計算を変えないような値を返し、リストで再帰する時はリストの終端nilを返す。
  • number?は基本関数。add1 sub1 zero? car cdr cons null eq? atom?も基本関数。

気をつけた事
  • +, -, *, /, <, >, =はoを付けo+, o-, o*, o/, o<, o>と書いた。exptはo-exptと、o-を付けた。でもlengthはo-付けずにそのまま書いた。
    • 「はじめに」p.xiiiを見るとsub1とadd1がないので組込み関数+と-を使って定義する。
    • +や-を直接書くと循環的な定義になってしまうのでo+, o-と書く。
    • という事はR5RSで定義されてる関数はo-つけたりoつけて書いた方がよいのだろうか?

疑問点
  • 基本関数って?「はじめに」p.xiiに出ているSchemeの一部の機能の中で特殊形式じゃない関数の事を基本関数と呼ぶのかな?
  • p79でもcondでnull?か調べてelseで分岐した後またcondしてる。これも簡素化してないのは3章p42「そのときに関数の構造が引数の構造と一致しないからです」という事なのだろうか。
  • p80で同じatomかの判定にeq?を使っているがこれだと同じシンボルか判定出来ても同じ数か判定出来ないのでは?(p12参照。実際eq?の引数に数が来てもかまわない、と注釈に書いてはいるが。)eqan?の間違い?

gitの使い方
とりあえずこんな感じの事をした。前にも1回やったような気がする。忘れそうなのでメモ。
こまめにpushしない方がいいかな?ちょっと悩みますね。

そんな感じです。ext/charconv/test.scmについては別途読んでエントリあげてみようかな、と。

0 件のコメント:

コメントを投稿