問題タブ [logic-programming]
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.
clojure - Clojure の「core.logic」でのゴールの順序付け
次の Clojure コードはcore.logic
、2 つの異なる順序で同じ目標を持つ同じ論理問題を解決するために使用します。このような順序の選択により、一方はすぐに終了し、もう一方はハングします。
この問題を回避するための一般的な解決策または一般的な方法はありますか?
logic-programming - ファイル内のデータログプログラムをpyDatalogにロードする
pyDatalog.load()メソッドを使用して小さなpyDatalogプログラムをロードしようとしています。たとえば、https: //sites.google.com/site/pydatalog/から階乗サンプルを読み込んでいます
ファイルsample_datalog_program.dlには、次のものが含まれています。
私は何が間違っているのですか?行pyDatalog.load(mc)を次の4つのコメント付き行に置き換えると、正常に機能します。
私が得るエラーは次のとおりです。
ありがとうございました!
logic-programming - pyDatalog: カスタム述語でバインドされていない変数を処理する
私は、Weather Underground からの気象データを分析する pyDatalog プログラムを作成しています (現時点では、私自身と社内の他の人のためのデモとして)。開始時間と終了時間の間の読み取り値を返すカスタム述語リゾルバーを作成しました。
これは、t1 と t2 が特定の値にバインドされている場合にうまく機能します。
ただし、別の順序で条件を指定して goodTime ルールを宣言すると (つまり、timeBetween を解決しようとする時点で Y と Z がバインドされていない場合)、空のセットが返されます。
これは間違っているようです。2 つのクエリは同じ結果セットを返すはずです。
私の質問は、pyDatalog でこの状況を処理する方法があるかどうかです。必要なことは、 timeBetween 述語がエンジンに何らかの方法で後退し、これを試す前に最初に他のルールを解決しようとするように指示できることだと思いますが、ドキュメントでこれへの参照が見当たりません。
prolog - 再帰を末尾再帰に変換しますか?
ある数のn乗[A^n = A * A ^(n-1)]を再帰的に見つけ、ショートカットA ^(2n)= A ^ n * A^nを使用する述語を書き込もうとしています。
これがこれまでの解決策です。
ここで、この末尾再帰を作成します。階乗やパワーなどの単純なケースでは、ショートカットなしで(アキュムレータを追加することで)テールを実行できますが、これは困難です。
どんな助けでも大歓迎です!
clojure - core.logicをカスタムタイプに拡張する
core.logicを試していますが、独自のカスタムデータ型がロジック式に参加できるようにしたいと考えています。
基本的に、これは数式ツリー内のノードを表し、ノードツリーと使用される非バインド変数のセットが含まれます。node
定数、シンボル、または(Operator Expression Expression....)
ツリーノードのいずれかです。core.logicを使用して数式を操作し、そのような式のサブツリーと照合できるようにしたいと思います。
可能であれば、どうすればこれを行うことができますか?
core.logicのソースコードから、拡張するのに適しているように見えるプロトコルがいくつかIUnifyTerms
あることがわかりますが(たとえば、IReifyTerms
など)、これらすべてがどのように使用されるのか、そして実際にどのプロトコルが使用されるのかは完全には明確ではありません。拡張する必要があります。
clojure - 2 方向への射影は、core.logic でリレーショナルとしてカウントされますか?
project
in core.logic はリレーショナルではないことを理解しています。
ただし、内部で両方向に射影することにより、リレーショナルのような動作を得ることができるようですconda
。
これはリレーショナル操作としてカウントされますか? それとも、これを非リレーショナルにする何かが欠けていますか?
prolog - Prolog でリストの連続する項目を交換する
リストの 2 つの要素を交換できる Prolog コードを作成しようとしていますが、それらが互いに連続している場合に限ります。あれは、
与えるべき:
(d と e は連続しています。)
でも、
常に失敗する必要があります (a と e は連続していません)。
アイテムがリストに表示されるのは 1 回だけであると想定できます。
次のコードがありますが、実際には正常に動作しています。
しかし、コードを見るだけで、これは恐ろしい方法であることがわかります。反復的で非効率的で、私のような Prolog の初心者だけが書くことができます。
これを改善する方法についての提案は大歓迎です!
logic-programming - 制約ストアに pyDatalog を使用する
次のルールを考慮してください。
そして、満たす制約を見つける問題: a(X,1)
問題は、pyDatalog を使用してリスト [(X==1)] を作成できますか? または [(X>0), (X==1)]?
ありがとう、
prolog - 左再帰を許可する Prolog 実装はありますか?
句で左再帰を許可する Prolog 実装があるかどうか疑問に思います。私の直感では、実装で幅優先のゴール検索を使用する場合、左再帰がサポートされる可能性があります。しかし、よくわかりません。効率についてはあまり気にしないことに注意してください。
prolog - テーブリングはどのように効率を改善しますか?
Prolog プログラムの効率を向上させるためにテーブルがどのように機能するかについて興味があります。それはどのように実装されていますか?説明と参照の両方を歓迎します。