問題タブ [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.

0 投票する
3 に答える
2678 参照

lua - Luaでロジックプログラミング?

Lua でロジック プログラミング (Prolog を考える)を行う方法はありますか?

特に: ロジック プログラミング用の Lua モジュールはありますか ( miniKanrenの実装が最適ですが、厳密には必須ではありません)。[1]が見つからなかったからです。そうでない場合、Luaでロジックプログラミングを行う方法が知られている(できれば試した)方法はありますか?

また、Lua で論理プログラミングのようなことをやろうとした人はいますか?


[1] これまでのところ、Metalua で作成する可能性について言及しているブログ投稿しか見つけていませんが、標準の Lua と互換性のあるものを見たいと思っています。

0 投票する
1 に答える
229 参照

database - clojureでのロジックプログラミングのための優れた/確立されたデータベースバッキング戦略は何ですか?

core.logicのようなロジック プログラミング アプローチを使用してファクトをクエリするための (演繹的な) データベースをセットアップするための戦略に関する深い情報を見つけるのに苦労しています。発見されるほとんどの例は、記憶の中で作成された事実を扱っています。

そこにある本当に素晴らしいライブラリはCascalogです。これは Hadoop の上にあり、データログに触発された素晴らしく直感的なクエリ言語で map-reduce を抽象化します。

しかし、Cascalog は Hadoop のみであり、nosql やリレーショナル (演繹データベース) など、他のタイプのデータベースとうまくいく同様の clojure ソリューションがあるかどうか疑問に思います。

0 投票する
1 に答える
321 参照

logic-programming - モード言語のコミュニティ リソース

モード言語を学習する際、インタラクティブなヘルプはどこに行けばよいですか?

優れた説明が記載された本、チュートリアル、および Web ページを見つけました。IRC チャネル、アクティブなメーリング リスト、スタック交換などのやり取りが見つかりません (そのようなリストはありますが、月に 1 つか 2 つのメッセージが届きます)。

この言語について、他にどのような対人リソースがありますか?

0 投票する
2 に答える
1268 参照

clojure - Core.logicの簡潔な説明

ClojureのCore.logicを使用したい。しかし、それがどのように機能するかも理解したいと思います。どこかに簡潔な説明がありますか?(メタサーキュラーエバリュエーターを実装するようなものですか?)

ありがとう!

0 投票する
1 に答える
241 参照

constraints - Eclipse 制約プログラミング - search/6

Eclipse 制約プログラミング フレームワークの search/6 関数に関するこのドキュメントを理解するのに苦労しています。

選択パラメーターが基本的に値の順序に影響することを理解しています。

選択方法が変数の順序を選択しているようにも見えますが、そのすべてのオプションを完全には理解していません。

他のパラメータについてはよくわからないので、誰かが言葉で説明できるかどうか疑問に思っていました. 私は制約論理プログラミングの理論をかなりよく理解しているので、それらの概念を自由に参照してください。私はそのドキュメントの CS 専門用語の多くを理解していません (アリティなど)。

ありがとうございました

0 投票する
3 に答える
1102 参照

scala - Scala での基本的なロジック プログラミング

次のような論理句が提示される楽しい小さな問題があります。

今(私が思いついたこの簡単な例が実際に検証されると仮定すると:P)、それは簡単に見ることができます

しかし、これは非常に不自然な例です。

20 個 (または 1 万個) のルールがあり、それらが重複しているとしたらどうでしょう。有効な単一の回答があり、何らかの方法でルールにアクセスできると仮定します (述語のリストなど)。

素晴らしく、一般的で、直感的な解決策はありますか? Prolog が特定のライブラリで解決できることは知っていますが、私の試みは無駄でした。範囲内のすべての数値を力ずくで並べ替えてから、ルールに準拠していることを手動で確認できることはわかっています。しかし、それはかなり不自由なようです。

0 投票する
3 に答える
230 参照

prolog - Prolog でのバックトラッキング中の状態伝搬

Prolog に、特定の状態空間を検索する単純なプログラムがあるとします。

そして、私はそれを知っています:

  • generate(State, NewState)NewState与えられたものに対して少なくとも 1 つを生成しているState
  • 全状態空間は有限である

search述語を変更して、常に有限の時間でチェックインできるようにしたいと考えています。だから私は次のようなものを書きます:

これは機能していますが、バックトラッキング中に計算された状態が失われているため、スペース サイズの最大高さを持つ検索ツリーができました。

計算された情報を失うことなく、バックトラッキング中に状態を伝播する方法はありますか? O(space_size) ノードを持つ検索ツリー全体が必要です。出来ますか?

編集:assert/[1,2]グローバルメモリとして機能する新しい句を動的に作成するために 使用する必要があるようです。

0 投票する
2 に答える
97 参照

graphics - generatedInitialize() の使用に関するチュートリアル

最近、prolog はグラフィカルな表示を作成できると言われており、 predicate を使用することでそれが可能であると言われましたgeneratedInitialize()

これについてのチュートリアルをお願いできますか?

たとえば、長方形を表示する方法は?

Win-Prolog 4.920 を使用しています。

0 投票する
1 に答える
315 参照

haskell - 最適な処理順序を見つける方法は?

興味深い質問がありますが、正確にどのように表現すればよいかわかりません...

ラムダ計算を考えてみましょう。与えられたラムダ式に対して、いくつかの可能な削減順序があります。しかし、これらの中には終了しないものもあれば、終了するものもあります。

ラムダ計算では、1つの特定の還元次数があり、それが実際に存在する場合、常に既約解で終了することが保証されていることがわかります。それは通常の順序と呼ばれます。

簡単なロジックソルバーを作成しました。しかし、問題は、制約を処理する順序が、解決策を見つけるかどうかに大きな影響を与えるように見えることです。基本的に、私の論理プログラミング言語には通常の順序のようなものが存在するかどうか疑問に思っています。(または、単なるマシンでこの問題を決定論的に解決することは不可能かどうか。)


それが私が求めているものです。おそらく、答えは「単純な論理ソルバー」が何であるかによって大きく異なります。それで、簡単に説明しようと思います。

私のプログラムは、 The Fun of Programming(Jeremy Gibbons&Oege de Moor)の第9章にあるコンビネータのシステムに密接に基づいています。言語の構造は次のとおりです。

  • ソルバーへの入力は単一の述語です。述語には変数が含まれる場合があります。ソルバーからの出力は、0個以上のです。解決策は、述語を真にする一連の変数割り当てです。

  • 変数はを保持します。式は、整数、変数名、または部分式のタプルです。

  • 式(述語ではない)を比較して等価である等式述語があります。すべての(バインドされた)変数をその値で置き換えると、2つの式が同一になります。(特に、すべての変数は、バインドされているかどうかに関係なく、それ自体と等しくなります。)この述語は、統合を使用して解決されます。

  • ANDとORの演算子もあり、これらは明白な方法で機能します。NOT演算子はありません。

  • 基本的にローカル変数を作成する「exists」演算子があります。

  • 名前付き述部を定義する機能により、再帰的なループが可能になります。

論理プログラミングの「興味深い点」の1つは、名前付き述語を作成すると、通常は前後方向(場合によっては横方向)に機能することです。標準的な例:2つのリストを連結する述語を使用して、リストをすべての可能なペアに分割することもできます。

ただし、用語の順序を並べ替えない限り、述語を逆方向に実行すると、検索が無限になることがあります。(たとえば、ANDまたはORのLHSとRHSを交換します。)ソリューションセットが正確に設定されているすべての場合に迅速に終了するために、述語を実行するための最良の順序を検出する自動化された方法があるかどうか疑問に思っています。有限の。

助言がありますか?

0 投票する
1 に答える
181 参照

logic-programming - Maude式を文字列に変換します

Maude式を文字列に変換する方法はありますか?

Haskellに相当するものを探していshowます。