Introduction to Prolog (in Japanese) を一通り読んだ感想:
- 便利だなぁ "変数を含んだ質問では,複数の答えが存在する場合がある. たとえば, saburo の子供は naoyuki と shinji の 2 人がいるから ?- father(saburo, C). の答えは 2 種類存在するはずである. Prolog ではこのような場合,プログラム中での記述の順序にしたがって 答えが表示される."
- えーと。これは定義の順に辿って最初に見つかった1つの例が選択されるってことなんです? "質問 ?- father(G, F), father(F, hyogo). の場合も左から順に処理される. まず father(G, F) の最初の答え G=naoyuki, F=hyogo が求められる."
- これでも、、、バックトラックを手作業で制御するとなると、、、記述量が増えませんか?
- あーspyは便利ですね。
- でも、、、それってシンボリック実行の方がより強力だと感じます
- うーん、これCollatzを実装したとしても任意の自然数で停止する証左にならないのでは。。。
- これ結局実行しているから、バックトラックで枝切りした範囲でしか健全性が主張できないのでは
- 数式微分の例なんですが、、、これ本当に数学の微分の公理系と一致していますか?高校数学を忘却してしまったために知覚できません。。。
- 命題論理は、、、まぁどこにでもあるのでは。。。
- ボトムに落ちてはダメなのでは。。。 "実行して見ると, v1 から v4 などについてはちゃんと yes と表示されますが v1 から v5 は答が出ません. これは, v1 → v2 → v3 → v4 → v1 → … となり, プログラムが無限ループしているためです. 無限ループを止めるには C-c (コントロールC) を入力してから a を入れます."
- ただ、バックトラックを許すならばもっと大規模な問題を検査できるという点については同意できると思います。容易にボトムに落ちる可能性がいつも残されますが。
- Prologの世界では基本的に #停止性 については議論できないということなのでしょうか。。。
- あー、なんかパーサは書きやすいそうな雰囲気が。。。
- #割り算の定義 ゼロ除算はどうするんですか?
- "nat(N), prime(N)." はすごい自然な表記ですね。 #Prologは国語だ というのが少しわかった気がします。
- ただ、、、その中身はガード条件を実際に実行して素数を低い値から順番に求めているだけなのでは。。。
- 今の雰囲気だとPrologは既存の命令型言語と同等の力と停止性の不足があるが、より簡潔に記述できる。ただしバックトラックという例外は起きる可能性は何時でもあって、当該バックトラックは手動で制御する必要がある。なんかSmalltalkのカオリが。。。
ATS3へのフィードバックは: