問題タブ [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.
logic-programming - pyDatalog で関係を作成すると、間違った答えが得られるように見えるのはなぜですか?
私は Datalog の概念に慣れていないので、pyDatalog を通じて調査しています。単位測定コンバーターを試しています。したがって、たとえば、1 メートルが何インチであるかという事実が与えられた場合、1 インチが何メートルであるかを教えてくれるはずです。これまでの私のコードは次のとおりです。
プログラムがインチをメートルに正しく変換しないのはなぜですか? 1 メートルが 39.37 インチであることを確認し、逆数規則を適用して逆に変換します。したがって、0.0234 と出力されるはずですが、実際には出力されます。
clojure - core.logic matche、defne パターン マッチング コンストラクトはどのような構文を使用しますか?
一部の core.logic コンストラクト ( matcha
、matche
、matchu
、 ) はdefne
、fne
パターン マッチング式を本体として使用し、次のように使用できます。
しかし、core.logic のドキュメントにパターン マッチングの構文の仕様が見つかりません。この構文は何ですか? 多分私はいくつかのミニカンレンのドキュメントや本でそれを見つけることができますか?
- 接頭辞が付いた変数と接頭辞が付いていない一致した変数の違いは何
?
ですか? - リストに加えて、他の破壊構造はありますか( clojure
.
と同様)?&
[_ _]
2 つの要素を持つシーケンスのみに一致しますか?- 地図を破壊することは可能ですか?
scala - 「Prolog in Scala」を使用して利用可能な型クラス インスタンスを見つける
https://speakerdeck.com/folone/theres-a-prolog-in-your-scalaを考慮して、Scala 型システムを「悪用」してCanBuildFrom
、指定された基準に一致する eg のすべてのインスタンスを見つけたいと考えています。プロローグ スタイルでは、次の疑似コードの行で何かを評価します。
つまり、ランタイムはSrc
ステートメントを満たすすべての値を検索しますcan_build_from(Src, int, list[int])
。
さて、Scala の暗黙的なルックアップ システムであるプリミティブな制約/ロジック プログラミング環境は、そのようなトリックに使用することを意図しておらず、複数の見つかった値を "返す" ことができないことを認識していますSrc
。ボックスなので、私の質問は次のとおりです。何らかの方法で in のすべての可能な値を取得できるようにするための「魔法のトリック」はありX
ますCanBuildFrom[X, Int, List[Int]]
か?
追加の例:
CanFoo[X, String]
ここで、クエリを実行して を取得しX ∈ [Int, Double, Boolean]
たりCanFoo[Int, X]
、 を取得したりしたいと考えていますX ∈ [String, Symbol]
。
または、CanFoo[X, String]
を返します。つまり、その一致List(canFooIntString, canFooDblString, canFooBoolString)
のすべてのインスタンスです。CanFoo
prolog - 数値の動的量の追加
与えられたデータベースを取る、例えば
/1 入力のみを取得するように制限して、50 × 100 を超える入力の量を計算します。例えば
計算機能を模倣するために次のプロローグ コードを試しましたが、失敗しました。
I+100 が意図したとおりに機能しません。
prolog - 不純なプリミティブを使用する Prolog 述語の純度
とが不純なプリミティブであることは知っていますが、それらを使用すると、それらを使用するvar/1
すべてのプログラムが不純になりますか?nonvar/1
!/0
plus/3
私は、あたかも純粋であるかのように振る舞う次の述語を書きました。述語は実証的であり、効率的に設計されていません。
2 つの質問があります。
- 上記の述語
plus/3
は本当に純粋ですか? - 一般に、特定の関係が論理的に純粋であることをどのように証明できますか?
この質問は、この回答に関する議論に続きます。
prolog - 論理プログラミングに関して、Prolog と miniKanren の主な技術的な違いは何ですか?
論理プログラミングについて読みたいとき、私はいつもそれを行うための 2 つの「主な」方法に出くわします。
- miniKanrenはThe Reasoned Schemer で導入されたミニ言語であり、 core.logicにより現在人気があります。
- Prolog、最初の「大きな」ロジック プログラミング言語。
私が今興味を持っていること: 2 つの主な技術的な違いは何ですか? それらはアプローチと実装が非常に似ていますか、それとも論理プログラミングに対してまったく異なるアプローチをとっていますか? それらは数学のどの分野から来ており、理論的基礎は何ですか?
recursion - Prolog における 2 つの順列 (サイクル) の積
Prolog で 2 つの順列の積を (サイクル形式で) 見つけたいのですが、問題が発生しています (ほとんどの場合、それがどのようになるか想像もできないためです)。
これらの順列を別の表現に変更することを考えましたが、どちらが正しいかわかりません。
だから私を助けてください、どんなヒントでも大歓迎です。
%permutationproduct(+P1,+P2,-結果)
編集:順列の積の下で、私はこれを意味します:クリック(しかし、私たちの入力はサイクル表記であり、プロジェクトをより困難にします)。入力は 2 つの順列 (P1、P2) であり、期待される結果は 3 番目のパラメーター (順列の積) です。
そして、私は実際にはもっと大きなプロジェクトに取り組んでいます。これはその一部にすぎませんが、前述のように、想像できないため、開始することさえできません。