2010年1月11日月曜日

Schemeコードバトンに参加しました

Schemeコードバトンに参加しました。g000001さんのをテンプレに、そのリポートを。

第1回 Scheme コードバトンのお知らせ - ひげぽん OSとか作っちゃうかMona-
Schemeコードバトンに参加しました - わだばLiperになる -

  • g000001さんからバトンを渡されました。
  • 渡されたバトン http://gist.github.com/273441
  • 次はquek(LETTER)さんへ
  • 渡したバトン http://gist.github.com/273567
  • やったことは、g000001さんがCL化したことを受けて、「とにかくCLらしく!」です。CL臭が結構出せたとしたら嬉しいです。
  • 変更点

    • シェルアプリではなくREPLアプリという流れを助長しました。エントリポイントは、mainではなく、(hige:pon)に変更。
    • 英単語を登録できるTop-level関数をつくりました。(hige:pin)
    • 辞書のCSV一覧表示のTop-level関数をつくりました。(hige:pun)
    • pinとpunは、実践Common Lisp の第三章の技法をそのまま使いました。CL入門者の方が担当されたときにいじりやすいかな、という狙いです。
    • このツールを使う名前空間(主にcl-userかな)と、このツールの名前空間の整理をきっちりしました。英単語はSymbolで表現し、case-sensitive かつ package-awareでread/writeするようにしました。(cl-userが英単語で汚れていかないように、ということ)
    • read-char,clear-inputのシーケンスが、私のTop-levelでは挙動があやしかったので、read-lineに変更しました。
    • ダイナミック変数を導入しました。ツールの利用のライフサイクルを通して固定されている束縛については、引数で渡していかなくてもよいだろうと。先々テストもしやすいかもしれません。
    • CLのイメージ指向を際立たせるためdocumentationストリングをまめに書きました。英語はいいかげんです。。。
    • 処理に無駄がないように、read time evaluationを必要なところで使いました。
    • 制御に関わる部分は命令的に書き、関数の性質がある部分は関数的に書きました。
    • 正答率でソートする部分は、学習効率を高めるためのストラテジの部分なので、関数として外に出して交換しやすくしました。現状は#'sort-dict-standardのみ提供。
    • とにかくCLらしく、ということで、(lambda もいちいち#'(lambdaにかえたり。

    • なんとも気持がいいので、goto、残しました。



やってみて気づいたのは、

Scheme と CL は思ってた以上に別物だ

ということです。自分一人で両方やっているときは、そういう風には思わなかったんです。距離感としては、C言語とJavaぐらいはあるように思います。優劣ではなく距離感として。

あ、もしかしたら今回のものがピュアR6RSだから?かもしれません。

こつこつ。

0 件のコメント: