問題タブ [prolog-metainterpreter]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
prolog - プロローグでメタプログラムをコンパイル中にエラーが発生しました
私は ECLiPSe Prolog でメタプログラムを実装しようとしています。ここに私が書いたコードがあります -
でクエリを実行するとsol(go(X)).
、エラーが発生accessing a procedure defined in another module in clause(X is 5, _292)
して中止されます。すべてのトップレベル モジュールをクリアし、ECLiPSe を再度開いてから実行しようとしましたが、それでも同じエラーが発生します。
その理由は何ですか?
ありがとう!
prolog - Prolog プログラミング言語と証明木
この証明を思い出してください。
次のように、インタープリターの 3 番目の規則が変更され、インタープリターの他の規則は変更されていないとします。
両方のバージョンのクエリに対して作成されるプルーフ ツリーを考えてみましょう。変数の置換は、1 つのバージョンだけで実現できますか? 説明。一番左の無限枝の向こう側に本葉が移動することはありますか? 説明。両方の質問で、答えが肯定的である場合の例を挙げてください。これは証明にどのように影響しますか?
私を助けてください !TX
prolog - 複雑なプロローグ ループの処理
私のプロジェクトでは、かなり複雑なルールをエンコードするために Prolog を使用しています。相互再帰を含む多くの再帰があります。ルールの一部は次のようになります。
と の間にかなり明白な無限ループがpred1
ありpred2
ます。残念ながら、これらの述語間の相互作用は非常に複雑で、分離するのが困難です。に渡されたオブジェクトのリストを渡すことで、このインスタンスの無限ループをなくすことができましたpred1
が、これは非常に扱いにくいです! 実際、このアプリケーションで Prolog を使用する目的が大きく損なわれます。
Prolog で無限ループを回避するにはどうすればよいですか? たとえば、証明の過程でサブゴールとしてpred1(foo)
証明しようとすると、失敗してバックトラックします。pred1(foo)
メタインタープリターでこれを行うことは可能ですか?