DATA? or PROGRAM?のジレンマ ――LISPですか。
◆Cを知ってる人のためのLISPの文法
† DATA型
S表現symbol-expression シンボルまたはリスト。 ――LISPの本領は記号操作にあるので、とりあえずは数値を除外。
シンボル '(や ')を含まない単語
リスト シンボルまたはリストを適当に並べて、( )でくくったもの。 ――循環定義?
(eq x y)という関数に喰わせると、objectレベルでの同一性が検定できる。
(equal x y)という関数に喰わせると、S表現の同一性が検定できる。
† 関数てゆーかPROGRAM?
関数呼出し実行するとき、
関数名(arg1, arg2, ...)
のことを、
(関数名 arg1, arg2, ...)
と書く。つまり、
☆関数もリストで表現される。その結果として「関数定義のソースリスト」をDATAとして関数呼出しの実引数etcに使い回せる。
――Cでの、"関数へのポインタ"よりもいろいろなことができる。;programを実行中に、別のprogramを自在に組立ててそれを実行しちゃうとかw
――また、Cはコンパイル言語なので、逆コンパイルでもしないと実行programの側からはソースリストを取得できない。
⇒関数実行中に、その関数自分自身のソースリストをDATAとして扱うことは出来ない。
――fileにして喰わせるってのも何か違う感じだし。
☆その半面、(a b c...)とかいうリストは
タダのDATAなのか?
(a)という関数に(b c...)というDATAを喰わせるものなのか?
と言うジレンマには、
時と場合状況による。
としか答えられない。本質的に判断不可能。意図的に混同させている。
――ストアド方式の機械語みたい。――こっちは結果的な混同だけど。 ――またもやノイマン博士登場…
――DATAと明示するときは、(quote (a b c))と書く。'(a b c)と略記。片側引用ってこと。
(equal '(a b c) '(a b c))
>t ――trueの意
(equal '(equal '(a b c) '(a b c))
'(equal '(a b c) '(a b c)) )
>t
――ほらね! カワイイ!!
computer数学やパラドックスに興味がある人は、LISPを勉強しましょう。
LISPバンザイ、viva LISP!! LISPは舌っ足らずにも世界に平和を導く!!
――LISP教(狂)かよ?