いくつかの事実を含む述語 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)]
いくつかの事実を含む述語 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)]
コメントセクションで@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
。