【发布时间】:2016-06-04 20:37:40
【问题描述】:
我不明白为什么我的谓词没有回溯并找到所有解决方案。
person(john).
person(erik).
allExceptSpider(person(Spider),T ):-
setof(person(X),person(X),S),
subtract(S,[person(Spider) ],T).
如果我用两个变量来调用这个谓词:
allExceptSpider(person(Z),Q)
那么它只会给我答案 Z = john, Q = [person(erik)] 但它不会回溯找到 Z = erik ,Q = [person(john)] 为什么?
【问题讨论】:
-
因为减法/3 签名:+,+,-。第二个参数应该是接地的。
-
@CapelliC。模式规格马虎。参见sicstus.sics.se/sicstus/docs/latest4/html/sicstus.html/…。 IIRC“++”被一些处理器用来表示“应该接地”。
标签: prolog backtracking