ふつうのプログラマのための関数型言語入門』を買いました。}」と「;」を使うと、複数の式を束ねる構文がインデントを使わずに記述できます。cs}こんな書き方もできるようです。ああ、これなら読みやすい......と一瞬思ったのですが、Haskell使ってる方は使ってないような気がします。(使ってたら、逆にインデントの話の方がマイナーな話になるだろうし。)だとしたら、あまり使わない方がいいですね。最初の方は大体読んだので、たのしみにしていたモナドの説明は明日にでも読めそうです。「car/cdrを使っていたらCommonLispを使う職場で笑われて、それ以降はfirst/restを使うようにした」なんて記事を読んだことがあるのですが、そんなもんなんですかね。本しか読んでないとその言語の常識ってのがいまいち分からないです。semanticsを読みました。R5RSの形式的意味論は日本語で呼んでもさっぱり分からなかったけど、R6RSの形式的意味論は英語でも(*)結構分かった気分になれました。面白かったのがletrecの説明。hole(bh).しかし、それは通常の変数と現在ブラックホール(bh)に束縛されている変数の両方を初期化するブラックホールに束縛されている変数ですよ。天文学のブラックホールとは一切関係ないと思いますが。v2(画像版はこちら)リストに循環部分がないか、これをリストの全ての要素に適用して確かめてるんですが、これって、リストの途中に循環構造があった場合一生終わらない気がするんですが、いいんでしょうか。2008大学に入ってすぐの頃、「クロージャって何ですか」と聞いたときの返答がこれでした。2008R6RSではR4RSで登場したsyntax-caseが復活すると聞いていました。確かに、R6RSの9.2節に「syntax-caseでもdatum->syntaxを使わなければ衛生的なマクロが定義できる(12.6節参照)」という説明がありましたが、syntax-caseという言葉が登場するのは恐らくそこだけで、おまけに、R6RSは11章までしかありませんでした。見てみたら参照と書いてあるのは、標準ライブラリ(*)の12.6節でした。標準ライブラリの説明も70ページもあります。英語がろくに読めない私にはあまりにも過酷です。Libraries—-でも、syntax-caseが仕様に戻ったというのは嬉しいです。syntax-ruleだけじゃ、私には使いこなせない気がするからです。Lispでyaccもどきを作ったんです。yaccのようにファイルに記述したBNFを読み取ってソースを吐き出すのではなく、S式として記述してあるBNFを入力とし、Lispのプログラムを吐き出すマクロとして作りました。次のような文法の構文解析器を生成したいとします。E→E+TE→TT→T*FT→FF→<E>F→iこの場合は、次のように書きます。$1)))そしたら、こんな関数が作られます。#:G291))))(以下略)まあ、正直いいものとは言いがたいのですが、とりあえず、動くものを作ることができました。Lispのマクロをまともに使ったのはこれが初めてでした。後は普通にLispの関数を書きなぐっただけだったからです。圧倒的にデバッグが楽だったと思います。これをR5RS通りのsyntax-caseがないSchemeで作ろうとすると、syntax-ruleでマクロを書く必要があり、syntax-ruleでは展開コードはテンプレートで記述する必要があり、テンプレートからは普通のSchemeの関数を呼び出したりはできないので......と、考えただけでも恐ろしいことになりそうです。いう訳で、Schemeを使ってマクロ展開コードを生成できるsyntax-caseが復活したことに私は賛成です。私の高校ではレポート一枚で終わりました。翌年、その事実が発覚して色々大変なことになりました。2008明日でようやく試験も終わりです。こんなものを作りました。「ムービー中のスクリプトが原因で...(中略)...スクリプトの実行を中止しますか?」というメッセージボックスが表示されますが、ここで「いいえ」を選ぶという問答をなんども繰り返す必要があります。結論:ニコスクリプトであんまし無茶をやっちゃいけないニコスクリプトの開発者の方にはもう少し高速化してもらいたいものです。あと、もう少し機能を追加して欲しいものです。最後に、もう少しだけ簡単な文法にして欲しいです。2008R6RSを印刷すると紙の枚数が多くなる。