假设我有一个包含几个事实的谓词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)]
发布于 2014-02-04 13:38:08
我只是总结一下@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的变量。
https://stackoverflow.com/questions/21082855
复制相似问题