Prolog 为什么元素数量不同的事实之间的setof输出会有差异?
在序言中,给出了事实的知识库:Prolog 为什么元素数量不同的事实之间的setof输出会有差异?,prolog,prolog-setof,Prolog,Prolog Setof,在序言中,给出了事实的知识库: someFact(one). someFact(two). otherFact(one, two, 123, 456). otherFact(one, four, 789, 123). 查询setofX,someFactX,List。产生以下结果: List = [one, two] 但是,查询setofX,otherFactone,X,,,列表会产生以下结果: List = [two] 而我期望它能产生[二,四]。使用源代码,我发现打字;返回第一个列表时,
someFact(one).
someFact(two).
otherFact(one, two, 123, 456).
otherFact(one, four, 789, 123).
查询setofX,someFactX,List。产生以下结果:
List = [one, two]
但是,查询setofX,otherFactone,X,,,列表会产生以下结果:
List = [two]
而我期望它能产生[二,四]。使用源代码,我发现打字;返回第一个列表时,将显示所有其他选项:
List = [two] ;
List = [four] .
为什么会这样?是因为下划线吗?我如何在不按键的情况下生成一个给定了2和4的集合;?
我不知道如何找到这个问题的答案,因为我很难将这个问题转化为一个生成搜索结果的问题你可以这样写:
集合X,B^A^otherFactone,X,A,B,List
查询:
?- setof(X, B^A^otherFact(one, X,A,B), List).
List = [four, two].
这是因为即使你把“u”放在setofX,B^A^otherFactone,X,u,u中,setof/3也是用来搜索所有自由变量的。通过将B^A^放在前面,您可以选择不绑定A或B,而只搜索其他变量 你可以写:
集合X,B^A^otherFactone,X,A,B,List
查询:
?- setof(X, B^A^otherFact(one, X,A,B), List).
List = [four, two].
这是因为即使你把“u”放在setofX,B^A^otherFactone,X,u,u中,setof/3也是用来搜索所有自由变量的。通过将B^A^放在前面,您可以选择不绑定A或B,而只搜索其他变量 除了@coder的答案,您还可以使用librarylambda编写:
除了@coder的答案,您还可以使用librarylambda编写: 经验法则:u和setof/3不会聚集在一起。经验法则:u和setof/3不会聚集在一起。