2007年3月26日月曜日

理由説明構文「because文」を考える ⊂プログラミング言語論

because statement is a brand new statement which process and excuse reasons in programing models”

新しいプログラミング言語を考える会!を勝手に発足。

現行のプログラミングの構文はとても単純だ。
まずは、条件分岐と繰り返しについて考える。

条件分岐
if もし~
else if そうでないなら、もし~
else どれにも当てはまらないなら~
switch こういう場合はこうしたい~(といって条件を列挙)
case この場合~
default どれにも当てはまらないなら~

繰り返し
while この条件が満たされるまで何度でもやってよ
for ○○回やってよ
foreach 手持ちのものが尽きるまで何度もやってよ

たいていの言語はこれだけしかない。if/swtichとwhile/for/foreachは、それぞれif と while に統一してもよいが、コードの読みやすさや効率性の観点から、複数あるだけにすぎない。

上記以外のものとして
catch 例外の検出
というものがあるが、これもおおざっぱには条件分岐の中にいれることができるだろう。

今回は、接続詞の観点から、これらに面白い構文を追加してみよう。
接続詞は、
・だから~
・しかしながら~
・そして~
・つまり~
という類のやつである。

ここで、すこし頭の体操を。

井上ひさしの「私家版日本語文法」(だったと記憶している)には、日本語の接続詞を、「・」「:」「∴」「∵」「∠」「≡」「∪」「⊥」などに置き換えてみるとどうなるかという興味深い話がでてくる。

これを使うと

やはり今日は雨だった。しかし私は傘を忘れた。そのためずぶ濡れになった。

という日本語を下のように書ける。

⊥今日は雨だった。∴わたしを傘を忘れた。≡ずぶ濡れになった。

いまでも日本語では 「、」や「。」を使っているので、少しくらい記号が増えてもいいじゃないか。現に英語では、「.」や「,」に加えて「:」や「;」「-」などがよく使われている。

さて、このように日本語を記号をつかって単純化するという発想があるのだから、プログラミング言語をもっと豊かなものにするという発想があってもいい。

僕がまっさきに考えたのが「because」である。
さっそく例文を見てみよう。

if (apple_count < 4)
nullMessageBox(”りんごが不足しています。”)
nullbecause “私が食べた”
end

のように命令に続いて理由を述べる。
これだけではさっぱりわからないと思われるので、これがどんな影響を及ぼすか考えよう。

because文は、言い換えれば「なぜなら構文」である。正式名称は「理由説明構文」とでも名付けておこう。

「なぜなら構文」は、プログラミングの命令と実行には影響を与えない。プログラミングは軍隊組織のようになっていて、命令が絶対の世界だ。あらかじ め、「こういう事態が発生したら、こう対処しろ!」という処方を言語化しておく。優秀な参謀(プログラマー)は、予想される事態をかなり遠くまで見通せる ので、予期しない事態(バグ)に強いコードを作り上げることができる。そういう世界である。

理由付けは、軍隊組織では通用しない。上官に「それはなぜでありましょうか?」などと聞こうものなら「つべこべいわずに行動しろ!」と一蹴されるだろう。そんな軍人が増えたら作戦が成り立たない。

話を戻して、この「because文」。やはり、プログラミングコードのなかにいれてはみたものの、自分でもどう利用できるのかまだ思いつかない。しかしここは軍隊式発想を捨てて、because文に意味と意義を与えたい。

以下のような特徴をつけられないかと考えている。
・becauseは、関数型言語における遅延評価[1]のように、その場では処理されずあとから評価される
・プログラムが強制終了したときなどコンピュータがユーザーに「いいわけ」を提示するインタフェースとなる
・ユーザーの理由を理解する聞き分けのいいコンピュータ

オチがないエントリーで、ここまで読んでいただいた方には大変もうしわけない。because文は、いまのところ現実的な意味を見いだせていない。

because文をプログラミング言語のなかでどう使うか? どんな動作をしたら面白いか? という新しい発想を思いついた方は、メールやコメント、トラックバックなどで教えてもらえるとうれしいです。

/*
//ロボットとの会話
if (apple_count < 4)
nullMessageBox(”りんごが不足しています。”)
nullbecause “私がたべた”
nullnullMessageBox(”それはよくない”)
nullbecause “くさった”
nullnullMessageBox(”それは仕方がない”)
nullend
end
*/

[1]WikiPedia 関数型言語
http://ja.wikipedia.org/wiki/%E9%96%A2%E6%95%B0%E5%9E%8B%E8%A8%80%E8%AA%9E

0 件のコメント:

コメントを投稿