2007-04-23-02-鶏==卵、あるいは透過性と等価性 - project-enigma

2007-04-23-02-鶏==卵、あるいは透過性と等価性

>> Site top >> weblog >> 月別アーカイブ >> 2007年04月のlog >> 2007-04-23-02-鶏==卵、あるいは透過性と等価性

最終更新日付:2013/12/31 19:02:34


鶏==卵、あるいは透過性と等価性

2007 年 04 月 23 日

...などという考えにとらわれてしまいました。ちなみに夕べは4時頃まで眠れませんでした。

「鶏が先か卵が先か」といいますが、今回陰郎に取り憑いたのは、「式が先か値が先か」というものです。式はその計算(=評価)の結果としての値を持ちます。その意味で式は値に推移できますが値は式には推移できません。値は値です。となると、式ありきで結果としての値がある...ということになるのですが。

しかし、値(というか式と見なされないような単一のリテラル値)も、「その値自身を返す式」と見なしたらどうでしょう。すると、式も値も、統一的に式と見なすことができますよね。となると、どちらが先かとか、式と値を区別するという考えを捨てて、両者を等価なものとして透過的に扱う方がシンプルで良いということになります。式は値であり、値は式である、と。

...不真面目に思われるかもしれませんが、簡単な構文解析処理を考えていたらそんな感じになってしまったのです。しかし、その方式だとまたシンプルに作れるのです。式も値も「式」として抽象化してやれば、複雑に階層化された構造の式も容易に扱うことができるわけですね。イマイチまとまりのない文章ですが、ひとまずそんなところで。

 

コメント

hiro - 04/26/2007 12:38:22 PM

はじめまして!

いつも陰郎さんの独特の雰囲気のgameなど(palmの)を楽しませていただいている者です.実は僕も似たようなことを考えたことがあったのでうれしくなってコメントしちゃいました.僕もおおむね陰郎さんと同じような結論なのですが,一つだけ気になることがあり,最近は「やっぱり式と値は別!」と思っています^^;

例えば,

a=1
b=2*a

というアルゴリズム(?)を考えます.この時点でbの中身は当然2ですね.

で,この後,

a=a*2

としたとします.

その後で,bの値(?)を呼び出す時に,もし,bが値ならやっぱり2が入っていて欲しいですし, bが式だと考えると,最新のaの値が使われて4となって欲しいと思います.つまり,b=2*a の段階でbを値とするか式とするか区別しておかないといけないと思うのです.

(陰郎さんが言っているのって,こういうことですよね??もしはずしてしまっていたらごめんなさいTT)これをうまく処理できるのでしたら,式も値も区別する必要はないと思うんですけどね〜

陰郎 - 04/26/2007 12:56:11 PM

> hiro さん

コメントありがとうございます。こういう変な(?)エントリにコメントいただけると嬉しいです。

代入に関しては、完了の時点で左辺の変数(あるいはそれが格納する値)と右辺の式(あるいはその計算結果)は切り離すべきだと思います。代入は、(この文脈では混乱を招く語用かもしれませんが)値のコピーですからね。

自分のエントリを読み返してみると、自分でも何がいいたいのかよくわからなくなりそうですが、大雑把にいうと 「 式そのものを値(の一種)として扱う 」 ということと、「 値そのものを(なんの計算も伴わないとはいえ)式として扱う 」 ということに尽きると思います。こうすると、C++やJavaみたいな言語で簡単な構文解析プログラムを作る際の設計がすごくすっきりするんです。

hiro さんの書かれた b=2*a を「(計算結果ではなく)式そのものの代入」としてとらえる考え方は、陰郎がこのエントリで書こうとしたこととは(厳密には)違いますが、非常に興味深いことです。一般的な演算記法ではこれは計算結果のコピーですから、別の記法があればとても面白いことができそうですよね。「演算式そのものを格納する変数」という考え方でしょうか。関数レスプログラミング...みたいなものに繋がりそうです。思いつくのは、Lisp の lambda 式...ほら、見えてきた(笑

hiro1999 - 04/28/2007 06:29:00 PM

hiroって人多すぎるのでちょっと名前を変えました^^;

なるほど・・・影朗さんがおっしゃっていたのは,あくまで式と値を統一的に捉えるという話だったのですね.以前,実験データの処理用に自分用のスクリプトインタープリタをc++で作ったことがあって,そのときに,関数と変数を統一化できないかと考えたことがあったので,つい,その話と混同してしまいました.大変失礼いたしました.

「演算子そのものを格納する変数」というのは,JavaScriptなんかだと実装されていますよね.スマートで良いなぁと思った覚えがあります^^;

それにしてもLispですか・・・.もしかして「アレ」を作る気ですか・・・!?だとしたらものすごく楽しみです^^

(またはずしてたりして・・・^^;)

いまだにtreo90を使っているので,僕の考えが正しければ・・・!!!

それにしても,レス早いですね ^^

hiro1999 - 04/28/2007 06:31:36 PM

お名前を変換し間違えました. 重ね重ね失礼しました.

このページにコメントする

 

このページのタグ

Page tag : 開発

 

 


Copyright(C) 2005-2017 project-enigma.
Generated by CL-PREFAB.