DATA? or PROGRAM?のジレンマ ――LISPですか。

id:mind:20040620から、記号論つながり

◆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教(狂)かよ?