Prolog为什么这个查询返回这个特定的结果,它的效果是什么
这个查询的效果是什么?为什么它会返回这个特定的结果?产生Prolog为什么这个查询返回这个特定的结果,它的效果是什么,prolog,Prolog,这个查询的效果是什么?为什么它会返回这个特定的结果?产生yes结果的原因是R,即仅由a和b组成的集合实际上是满足p(x)谓词的所有x的集合 如果要向R添加元素或从R中删除a或b,结果将是no p(a)和p(b)为true,因为断言谓词将这些子句添加到数据库中 类似地,保持R=[a,b]如果您要添加另一个子句,使用sayassert(p(c)),结果将是no(因为R将缺少c以拥有满足p(X)的所有X)。注意X在调用setof/3后保持未绑定状态,因为X是一个“虚拟变量”用于告诉Prolog在列表R
yes
结果的原因是R,即仅由a和b组成的集合实际上是满足p(x)谓词的所有x的集合
如果要向R添加元素或从R中删除a或b,结果将是no
p(a)和p(b)为true,因为断言谓词将这些子句添加到数据库中
类似地,保持
R=[a,b]
如果您要添加另一个子句,使用sayassert(p(c))
,结果将是no
(因为R将缺少c以拥有满足p(X)的所有X)。注意X
在调用setof/3
后保持未绑定状态,因为X
是一个“虚拟变量”用于告诉Prolog在列表R
中要收集的目标p(X)
的解决方案setof/3
还允许在目标中出现多个变量时使用更复杂的语法,因此一些变量的值可以作为复合术语组合在列表中,而其他变量的值可以在回溯中绑定或修改。
?- assert(p(a)),assert(p(b)),setof(X,p(X),R).
X = H142
R = [a, b]
yes