問題タブ [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 投票する
2 に答える
300 参照

prolog - Prolog で findall または assert/retract を使用せずに、要素をリストに追加したり、知識ベースからそれらを計算したりするにはどうすればよいですか?

次のようなファイル「students.pl」に学生データベースで構成されるナレッジベースがあります。

「findall」または assert/retract を使用せずに、ナレッジ ベースから各学生の述語にアクセスし、各科目の平均点または平均パーセンテージを計算したいと考えています。次のようにバックトラッキングを使用したい場合があります。

このアプローチでは、各要素にアクセスして書き込むことができますが、各「パーセント」値を要素としてリストに追加するか、「Percent1 is Total + Percent」のような述語を使用してパーセント値を合計してから見つける場合その平均、どうすればそうできますか?ナレッジ ベースは非常に大きいため、findall やrettract/assert を使用したくないことに注意してください。

どんな助けでも大歓迎です。

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

prolog - Prolog findall/3: 複数のバッグ

Fox and Geese タイプのゲームの AI を書いています。私の述語の1つは次のようになります。

ゲームの状態を取り、キツネで動きます。結果の状態は で統一されNextState、実際の動きは で統一されPegListます。すべてが期待どおりに機能します。

すべての動きの効用スコアを計算していますNextState。効用スコアが最も高い州を見つけられるようにするためfindall/3に、リスト内のすべての州を取得してから、それらの効用スコアを比較します。

最大の効用スコアを見つけることで、最高の効用スコアを持つものNextState(およびリスト内の位置) を知ることができます。問題が 1 つだけあります。現在、どの移動が に行われたかを推測する述語を書いていませんNextState。たとえば、次のようになります。

そのような述語を書く代わりに、私はfindall/3or と同等のものを使用したいと思います。私の質問は、2 つの異なるリストで 2 つの異なる変数を取得する方法があるかどうかです。私は次のように考えています(うまくいった場合):

findall/3そのような機能を2 回実行したり (醜いオーバーヘッド)、そのgetMove(+PrevState, +NextState, -PegList)述語を記述したりせずに実装できますか?

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

list - Findall で生成されたリストから重複を削除する

誰がメールを送受信したかという非常に単純なデータベースを考え出すことで、Prolog を実践しています。

findall事前に指定された の受信者を使用してリストを作成しましたX

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

prolog - Prolog findall/3

いくつかの事実を含む述語 pred があるとします。

findall/3 を使用して、パターン マッチ可能なすべてのファクトのリストを取得できますか?

たとえば、私が持っている場合

pred(a, _, _) 入手したい

[pred(a, b, c), pred(a, d, f)]

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

csv - プロローグし、csv ファイルを読み込んで述語を作成します。見つける

SWI-Prolog を使用しています。

一番上の行がプローブで、各行がサンプルである csv ファイルがあります。

実際のファイルには、20,000 を超える列 (「プローブ」) と 150 行 (「サンプル」) しかありません。

各関係を抽出し、それらを事実として別のファイルに出力したいと考えています。

例えば:

これまでの私のコード:

これはうまく機能しているように見えますが、機能しないか、findall で使用できないほど遅いです。

何が問題なのですか?

助けてくれてありがとう。

アップデート

お返事ありがとうございます。

私は定義しました:

したがって、ストリームではなく開いているファイルがあり、現時点では Functor 変数は不要です。

maplist をどのように使用したか混乱していますか? そして、私はそれをうまく機能させることができません。

私が試してみました:

としても:

しかし、どちらも失敗します。

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

prolog - パックマン netlogo ゲームのリストを持つ Findall

私はプロローグの初心者で、netlogo とプロローグを使用して pacman を単独で動かそうとしています。これは私のコードの一部です:

walkfront(_,_,_,_,_,_,Pacman,DirP,Lab,Ghost,_,Pellet,_,_,Decision) :- findall(Dir, ( member(Dir,[0,90,180,270]), \+ ( member((G,false),Ghost), dangerous(Pacman,G,2,Dir,_) ) ), L), findall(Dir,(member(Dir,[0,90,180,270]),(member(P,Pellet))),T), chooseNotDangerous(L,Pacman,DirP,Lab,Dir,T)

walkfront(_,_,_,_,_,_,Pacman,DirP,Lab,Ghost,_,Pellet,_,_,Decision)この行には、netlogo から取得したすべての情報のリストが含まれています。Pacman は pacman の位置 (x,y)、DirP は pacman が向いている方向、Lab は迷路内の空きスペース、Ghost はその位置です。 Ghosts (x,y,eaten?), Pellet はペレットのすべての位置のリスト (x,y), Decision は pacman によって選択された出力です.
最初の findall は、ゴーストがなく、危険でないすべての方向 (Dir) を提供し、それらを L というリストに保存することに
なっています。
私の質問は、私のコードが何らかの理由で機能していないため、このfindallが正しいかどうかです.2番目のfindallが原因である可能性があります.
助けてくれてありがとう :)。

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

prolog - Prolog で findall/3 を使用せずにクエリに一致するものをすべて検索する

データベースが与えられ、述語を使用してデータベースにクエリを実行しています

私は自分のデータベースを次のように持っています。

標準のfindall/3述語を使用する代わりに、独自の findall を使用したいのですが、

常にデータベースの先頭に移動する再帰を使用すると、findmin を再帰的に使用してデータベース内の個別のオカレンスを取得する方法がわかりません。

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

prolog - swi-prolog の findall/3 が変数バインディングを無視するのはなぜですか?

次のコードは、これらの結果を示します。

しかし、すべての要素が同じバインドされていない変数 (a ではなく) を共有するようにしたい場合、想定どおりに動作しません。

_G1918、_G1912、および _G1906 が互いにバインドされないのはなぜですか? それはswi-prologのバグですか?