問題タブ [prolog-findall]

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 投票する
0 に答える
321 参照

prolog - Prologを使用して2部グラフですべての完全一致を見つける方法は?

二部グラフですべての完全一致を見つけようとしており、各ソリューションの重要な評価を実行しようとしています(重要な手段、ハンガリーのアルゴリズムを使用できません)。これにはPrologを使用していますが、指数関数的でない解はありますか? (もちろん、結果が指数関数的でない場合..)

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

prolog - リストを最短から最長に並べ替える

私は最近プロローグを手に入れ、有名なパズル Knight's Tour [ここにあります] の解決策を見つけるプログラムを作成しようとしています。

Warnsdorff アルゴリズムを使用して、チェス盤の特定の場所から行うことができるすべての可能な動きを見つけようとしています。上記の動きを見つけるのに苦労しました。

これまでの私のコードは次のとおりです

可能な移動の数は、それらをすべて見つけた後にのみカウントされるため、リストは必要な方法でソートされていません。

たとえば、この入力で

結果は

しかし、私は得る

誰かが私が得るNewXのを手伝ってくれるなら、NewYそれは素晴らしいことです

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

prolog - Prolog で複数の変数を持つ Findall

Prolog で作成したルールからソリューションのリストを取得したいと考えています。

ただし、findall 述語は 1 つの変数でしか機能しないようです。

この明らかな制限を回避する方法を提案できる人はいますか?

私のルール

私が欲しいもの

私が今得るもの

また

0 投票する
0 に答える
361 参照

prolog - Prolog findall 無限ループ

物事を主張する述語があります。findall を使用すると、無限ループに入ります。

を使用するfindall(A,veiculos_troncos(A),NTr)と、上記の述語を使用して多くのポイント (座標) をアサートした後。

これは私が得るものです(findallを使用):

And etc... そしてそれはまた与えるまでぐるぐると回り続ける

などなど…。

理由がわかりません。

私の「アサーション」述語はうまく機能します(私は思う)、問題はfindall. 同じ解決策を何度も繰り返します。

例:

私が得るものは上です。

このエラーが発生するまで:

完全なプログラム (ソース ファイル) は次のとおりです。

NL は L + 1 です。

NL は L - 1 です。

NC は C + 1 です。

NCはC-1です。

(ソースファイルの終わり)

これを行う:

次のエラーが表示されます。

^ 例外: (10) findall(_G16022412, user:member([_G16022412|_G16022413], [[ (-8, 3, 19, [...|...], 1), (-8, 2, 18) , ..., ...)], [ (-8, 3, 19, ..., ...), (-8, 2, ..., ...)], [ (-8, 3, ..., ...), (-8, ..., ...)], [ (-8, ..., ...), (..., ...)], [ (..., ...)|...], [...|...]|...]), _G16022446) ?

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

matrix - Prolog で事実を行列として抽出する

以下があるとします。

Mこれらの事実の行列表現 ( ) を抽出したいので、

簡単な解決策は次のとおりです。

ただし、このアプローチにはいくつかの問題があります。

  1. データベースをn回トラバースします。nは引数の数です。と
  2. これは、任意のnにうまく一般化できません。

問題は、Prolog でこれを達成するための最も慣用的な方法は何ですか?

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

prolog - findall/3 は結果のリストに関連のない新しい変数を作成します

理にかなっています。の順列に取り組むことができ[A,B,C]、その順列には と同じ要素が含まれている[A,B,C]ため、これらの要素に対して行うことはすべて、元のリストに適用されます。

今:

どうして??findall/3ではなく、完全に無関係な変数を含むリストが表示されるのはなぜA,B,Cですか? のリストはZ互いに関連していないため、実際に得られる結果は長さ 3 の 6 つのランダムなリストであり、これは私が照会したものとはまったく異なります。

この動作により、次のようなばかげた結果が得られます。

これは、論理的な観点からは意味がありません。

これが実際には関係型の純粋な論理述語ではないことは理解してfindall/3いますが、これがここに示されている動作をどのように正当化するのかわかりません。

したがって、私の質問は次のとおりです。

  • この動作が述語に選ばれたのはなぜですか?

  • この動作が実際に私が望むものよりも好ましい一般的な状況はありますか?

  • 私が望む動作で のバージョンを実装する方法はfindall/3?