1

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

pred(a, b, c).
pred(a, d, f).
pred(x, y, z).

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

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

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

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

4

1 に答える 1

1

コメントセクションで@mbratchが言ったことを要約するだけです:

はい。ただし、名前付き変数を使用するか、それを行う単純なヘルパー述語を作成する必要があります。

名前付き変数:

findall(pred(a,X,Y),pred(a,X,Y),List).

ヘルパー述語:

special_findall(X,List):-findall(X,X,List).

?-special_findall(pred(a,_,_),List).
List = [pred(a, b, c), pred(a, d, f)].

これは機能しないことに注意してください。

findall(pred(a,_,_),pred(a,_,_),List).

と同等なので

 findall(pred(a,A,B),pred(a,C,D),List).

Templateしたがって、 の変数は の変数と統合されませんGoal

于 2014-02-04T13:38:08.677 に答える