Lisp Scheme Part41 (809レス)
前次1-
抽出解除 必死チェッカー(本家) (べ) 自ID レス栞 あぼーん

156
(1): 2020/03/03(火)18:09 ID:wrUSgHR4(1) AAS
>>152
> Prologではあんまり関連付けて言われないですよね

Prologは「論理プログラミング言語」と呼ばれたりするけれど書かれたプログラムを実行可能にするためのプログラミング言語であるために
論理のための言語(つまり論理式を記述するための言語)とはかなり違ってしまっているからね

その典型がPrologで動くプログラムを書く上で不可欠なカット “!” ね
あれは本来の論理には対応物がなく論理とは全く縁のないコンストラクトだが
カットを使わなければほとんどのPrologプログラムはまともに動かなくなってしまうだろう

その点、Schemeから命令的な言語コンストラクトおよび標準手続きであるset!とset-car!, set-cdr!を除いた部分は
弱い(weak, つまりλ抽象の本体式中のβ-簡約基(redex)は簡約せずに放置しておく)
作用的順序(applicative order)の評価戦略(reduction strategy)のλ計算そのものだ

call-ccは継続(continuation)というメタな(つまり意味論上の)値を対象レベルに持ち込むmeta-circular的な拡張であり
Schemeに限らずLisp一般で広く採用されているS-式という構文は自分の構文に対する抽象構文の表現になっているから
プログラムが自分自身(や同じ言語で書かれた他のプログラム)のソースコードを記述している言語を対象言語として
自分自身がそれを素直な形で操作できるメタ言語レベルの存在として振る舞えることになるからね

言い換えればS-式という表現形式のために括弧をやたらと多用させられるLisp言語では
ソースコードをその抽象構文(木構造)と同型な形で記述させていると言っても良い

だからLispのプログラムをLispで処理する場合には、C等のような普通のプログラミング言語で書かれたプログラムを処理する場合には
不可欠な字句解析や構文解析が実質上は不要なんだよ

何故ならば処理する側のLispプログラムにとって処理される側のLispコードは最初から抽象構文木と1:1対応する形式で提供される訳だから

正にゲーデルの不完全性定理で行っている形式化された論理のゲーデル数による表現とそれを原始再帰的函数や同述語を含むメタ論理のレベルで
処理する構造が、Lispの世界に対応していると言えるわけですよ
前次1-
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.036s