gpt4 book ai didi

prolog - 在查询中使用冗余目标

转载 作者:行者123 更新时间:2023-12-04 11:16:33 29 4
gpt4 key购买 nike

(在 suggestion of @repeat 上)考虑对 的查询纯程序1 ?- G_0.查询 ?- G_0, G_0. 有什么用?有?

脚注
1 没有 table (为了安全),约束是可以的。
Previous post就此主题而言。

最佳答案

查询?- G_0, G_0.有助于识别 ?- G_0. 的冗余答案

为此,只需比较 ?- G_0. 的答案数量即可。回答数为?- G_0, G_0. .无需存储这些答案(无论如何,这是一个常见的错误来源)。两个整数就够了!如果它们相等,则没有冗余。但如果 ?- G_0, G_0.有更多的答案,然后有一些冗余。下面是一个例子:

p(f(_,a)).
p(f(b,_)).

?- p(X).
X = f(_A, a)
; X = f(b, _A). % two answers

?- p(X), p(X).
X = f(_A, a)
; X = f(b, a)
; X = f(b, a)
; X = f(b, _A). % four answers
% thus p(X) contains redundancies

......现在让我们解决这个问题:
p(f(B,a)) :-
dif(B, b).
p(f(b,_)).

?- p(X).
X = f(_A, a), dif(_A, b)
; X = f(b, _A).

?- p(X), p(X).
X = f(_A, a), dif(_A, b), dif(_A, b).
; X = f(b, _A). % again two answers, thus no redundancy

无需手动检查所涉及的约束。

当我们仅使用 call_nth/2 显式搜索冗余答案时,这可以进一步扩展。 .
?- G_0, call_nth(G_0, 2).

关于prolog - 在查询中使用冗余目标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60288407/

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