2008/3/23 の comp.lang.scheme

  • Square brackets issue.
    • 投稿は関数を作るマクロがどうのこうのとか。投稿者の意図が分からない。
    • [ と ] は ( と ) と変わらないよね。良く使います。
  • Eager comprehensions for Bigloo
    • Bigloo では : をシンボルして使えないからうんぬん。
    • Eager comprehensions 分からないから調べた。SRFI-42 で決められていて。
      • (list-ec (: i 5) (* i i)) => (0 1 4 9 16)
      • (list-ec (: x 2 5) (: y 1 x) (list x y)) => ( (2 1) (3 1) (3 2) (4 1) (4 2) (4 3))
      • : で変数の範囲を指定してリストとかベクタを構築する。

ポートの実装 - Scheme VM を書く

あとで多少変わるかもしれませんが C++ の世界で

  • BinaryOutputPort
  • BinaryOutputFilePort
  • TextualOutputPort
  • Transcoder
  • Codec
  • ByteVector

を実装した。


以下のように使います。

UTF8Codec u;
Transcoder t(u, Transcoder::LF, Transcoder::IGNORE);
TextualOutputPort out(new BinaryOutputFilePort(stdout), t);
out.putChar(UCS4_STR("あ")[0]);

以下なんとなくメモ。

Binary Output Port

Binary Output Portインターフェース

  • put-u8
  • putbytevector

Binary Output Portの実装

  • ファイル
  • 標準出力
  • カスタムポート
  • bytevector ポート

実装のうち上2つは素直に実装すれば良い。
カスタムポートは初期化時に write! をうけとり以下のような擬似コードで動けば良い

put-u8(x)
{
    (write! #vu8(x) 0 1)
}

Binary Input Port

Binary Input Portインターフェース

  • get-u8
  • lookahead-u8
  • get-bytevector-xxx

Textual Input Port

Textual Input Portインターフェース

  • get-char
  • get-string-n
  • get-datum

Textual Output Port

Textual Output Portインターフェース

  • put-char
  • put-string
  • put-datum

put-char が実装できればあとは簡単。

Textual Output Port の実装

  • ファイル
  • 標準出力
  • カスタムポート
  • bytevector ポート
  • 文字列ポート(トランスコーダなし or 空)

BinaryPort を持つ感じで良さそうだね。

コーデック

  • ucs4char を受け取り bytevector を返す

トランスコーダ

  • 改行の取扱い
  • コーデック
  • エラー時の振る舞い

How to be Good

スタバにて。
40才くらいの女性がHow to Be Goodという洋書を真剣に読んでる。


あと近くでピアノの発表会があったらしく母娘でお茶している人がいる。どちらもドレスアップしています。
その発表会の演奏者の最高齢は74才のおばあさんらしい。


あとそういえば昨日からスタバの空調が冷房に。
通っているスタバはレジあたりは冷房が効かず、客席は鬼のように寒くなる曲者。
なので店員さんが冷房のかけすぎに気づかない。
最近やっと「寒いので冷房の温度を上げてもらえますか?」と店員さんに言えるようになった。成長したな(ぉ。