Archive for 3月, 2008

小学一年生を買ってきた

金曜日, 3月 7th, 2008

もちろん犯罪的な意味ではありません。雑誌です。
「ドラえもん どこでもゆびピアノ ドレミくん」(音声注意)というおまけが欲しかったからです。
近くの本屋に行ったら、「幼稚園」や「小学二年生」は売ってたのに、
何故か「小学一年生」だけが売ってませんでした。
まさか、おまけ目当てで買う大人が多かったりするんでしょうか……
とりあえず、「Lispの歌」を弾いてみました。
MPEG(1.44MB)

全自動4コマ

木曜日, 3月 6th, 2008

全自動4コマというWebアプリを見つけました。
入力されたキーワードをインターネット上から探し、
その情報を元に自動的に4コママンガを作ってくれるというサービスのようです。
詳しくはこちら
試しにLispと入力してみたら吹いた。

続7・PrologでR6RS(終) ~R6RSらしさを求めて~

水曜日, 3月 5th, 2008

PrologでSchemeインタプリタ作り終わったよー。
R6RS(のAppendixA)にほぼ準拠してます。
ソース
(SWI-Prologで動作を確認しています)
どのあたりがR6RSなのかということで、
R6RSっぽいところを集めてみました。

続6・PrologでR6RS ~letrecのターン~

火曜日, 3月 4th, 2008

letrecを作りました。
多分一番長い簡約規則。

evaluate("(letrec ((fact (lambda (n) (if (eqv? n 0) 1 (* n (fact (- n 1))))))) (fact 3))").
6
Yes

これで再帰呼び出しが書けるようになりました。
あとletrec*を作って、例外を発生させる規則を書けば、
Appendix Aの仕様をほぼ満たすことになります。

ゆとりTシャツ完成予想図

続5・PrologでR6RS ~地味な話~

火曜日, 3月 4th, 2008

Prologで作るSchemeインタプリタですが、
R6RSの形式的意味論の仕様を大体満たすようになってきました。
ただし、入力によっては死ぬほど遅いです(dynamic-windが関わると遅い?)。
とりあえず、最近触ったのは、例外処理、算術演算、リスト操作、
eqv?, apply, call-with-valuesあたりです。どれも地味で悲しくなります。
一番華やかなのは入出力をS式でできるようにしたこと。

evaluate("(car '(a b c))").
a
Yes
evaluate("(cdr '(a b c))").
(b c)
Yes

こうすると、かなりSchemeインタプリタっぽいですね。

R6RSの例外が複雑すぎる

土曜日, 3月 1st, 2008

R6RS Standard Librariesを全部読むのはしんどいので、
とりあえず例外のところ(7章)を読もうと思ったら、
説明で新しい型であるレコード型の機能を使いまくっていました。
レコード型といってもただのレコードだろと思ったら、
親レコードの指定とか色々な機能があるみたいです。
子レコードが親レコードの関数を使ったり、もはやオブジェクト指向みたいでした。
といってもまあ、レコードのところ(6章)は読んでないからあまり分からないんですが。
例外処理のための手続き、構文はそれほどありませんが、
レコードが複雑すぎるせいで、例外の機能も複雑になってます。
むしろ、例外を作るためにレコード型を作った気もしました。
あと10年もすれば「Schemeの仕様は小さい」は都市伝説になってしまうのでしょうか……