2011年5月1日日曜日

Scheme手習い Chapter 3

GW入ったのもあって早速進めようかと。
とりあえず読んでの感想的な
  • remberは「remove a member」
    • p23第1の戒律 (仮)いかなる関数を表現するときも最初の質問はすべてnull?にすべし
    • p35の定義だとmemberが見つかる前のアトムがすべて失なわれてしまう。
    • そこで偉大なるConsの出番! (p37第2の戒律 リストを作るにはconsを用いるべし。)
    • condのelseにcondを書いてるのは簡素化出来る。
  • firsts
    • p46第3の戒律 リストを作らんとせしときは、最初の要素になるものを記述し、しかる後にそれを自然なる再帰にconsすべし。
    • (else (cons (car (car l)) (firsts (cdr l)))の(car (car l))が要素になるもの、(firsts (cdr l))が自然な再帰。
    • 自然なる再帰にconsするためには、自然なる再帰の最後に返す値がリストでないといけないよね。なので最後に空リストを返すのか。(p9Consの掟 関数consは2つの引数を取る。consの第2引数はリストでなければならない。結果はリストとなる。)
  • insertR, insertL, subst, subst2は最初の解けたら似た感じだったので楽だった。
  • multi系もほぼ同じような感じだったので楽にかけた。
    • でもmultiinsertRのconsの順番間違えてmultiinsertLになってしまった。テスト通らなくて発見した。テスト様々。

疑問点や引っかかった事
  • testのnameのとこどうしよう。今はテスト本体のexprと同じの書いてるけどコピペが面倒になってきたり。
    • マクロでごにょごにょしたら出来るのかな
    • ページ番号でもいいかなーとか思ったけどぱっとみて何のテストか分からないような。
  • remberとか書くとき最初から簡素化してしまったんだけどこれは引数が空か確認する前後で分けてる感じかな?本には
    Q.ではなぜすぐに簡素化しないのですか。
    A.そのときに関数の構造が引数の構造と一致しないからです。
    と書かれてた。
  • コミットする時のメッセージのどういう風に書けばいいんだろ
    • 英語ェ…
    • 本とコミット内容の対応を取りやすいようにページ番号を入れてみた。
    • そういえば関数定義の前にもページ番号入れてみてます。自分で定義したやつはmy ~って書いてたり。
  • テストケースが無い関数は自分で考えないので頑張りたいところ。テストケースある関数に対しても自分でテストケース加えた方が楽しめるかな?
  • ハラペーニョ問題
    • jalapñoのñの読み方と入力方法がわからなかった。調べたところ「エニェ」
    • そもそもñってシンボルの名前に使えるのか?
    • 困った時はR5RS。
      Revised^5 Report on the Algorithmic Language Scheme
      The rules for writing a symbol are exactly the same as the rules for writing an identifier; see sections 2.1 and 7.1.1.
      という事で、シンボルを書くときのルールは識別子を書くときのルールと一緒みたい。とりあえずsections 2.1と7.1.1.を見よう。

      Revised^5 Report on the Algorithmic Language Scheme
      The precise rules for forming identifiers vary among implementations of Scheme, but in all implementations a sequence of letters, digits, and ``extended alphabetic characters'' that begins with a character that cannot begin a number is an identifier. In addition, +, -, and ... are identifiers.Here are some examples of identifiers:

      lambda q
      list->vector soup
      + V17a
      <=? a34kTMNs the-word-recursion-has-many-meanings Extended alphabetic characters may be used within identifiers as if they were letters. The following are extended alphabetic characters: ! $ % & * + - . / : < = > ? @ ^ _ ~ See section 7.1.1 for a formal syntax of identifiers.

      Schemeの処理系によって異るのかな、でもlettersとdigitsと記号はokっぽい。んで7.1.1を見ろと書いてあるので見る。

      Revised^5 Report on the Algorithmic Language Scheme
      こちらに図が載っておりました。identifierからこそこそ見てみるとなんかñは駄目っぽい
      http://www.schemers.org/Documents/Standards/R5RS/HTML/r5rs-Z-G-3.gif
    • という事でjalapeñoはjalapenoで代用しました。
    • ちなみにGaucheのドキュメントでこんなものを発見
      Gauche ユーザリファレンス: 6.6 シンボル
      R5RSのシンボルの定義では許されていない文字を使った妙な名前のシンボルを表記するのに 使う構文です。
      なるほど。これを使えばいいのか。使ってテストしてみるとこんな感じでした。


後は、multiremberをtraceしてみたけど分かりやすかった。たまにやっとこう…

0 件のコメント:

コメントを投稿