gpt4 book ai didi

prolog - 为什么我的谓词没有回溯?

转载 作者:行者123 更新时间:2023-12-02 06:29:21 26 4
gpt4 key购买 nike

我不明白为什么我的谓词不回溯并找到所有解决方案。

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)]为什么?

最佳答案

TL;DR:如果您使用 subtract/3 ,您的代码可能会丢失 .

person(john).person(erik).allExceptSpider(Spider, T) :-   setof(X, person(X), S),   subtract(S, [Spider], T).

保持纯洁!如何?使用list_item_subtracted/3 像这样:

allExceptSpiderNU(Spider, T) :-   setof(X, person(X), S),   list_item_subtracted(S, Spider, T).

头对头查询示例:

?- allExceptSpider(Z, Q).Q = [erik], Z = john.?- allExceptSpiderNU(Z,Q).   Q = [     erik]             ,     Z=john;  Q = [john     ],     Z=erik;  Q = [john,erik], dif(Z,erik), dif(Z,john).

关于prolog - 为什么我的谓词没有回溯?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37634782/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com