gpt4 book ai didi

prolog - GNU Prolog `delete/3` 谓词中的异常?

转载 作者:行者123 更新时间:2023-12-01 00:54:09 25 4
gpt4 key购买 nike

我发现 GNU Prolog(版本 1.4.2)的行为不一致 delete/3谓词:

| ?- delete([a,b,c], b, R).

R = [a,c]

yes
| ?- delete([(a,_), (b,_), (c,_)], (b,_), R).

R = [(a,_),(b,_),(c,_)]

yes
| ?- member( (b,_), [(a,_), (b,_), (c,_)] ).

true ? ;

no
| ?- select((b,_), [(a,_), (b,_), (c,_)], R).

R = [(a,_),(c,_)] ? ;

no
| ?-

以上所有结果都是我预期的,除了 delete([(a,_), (b,_), (c,_)], (b,_), R). .如果您在 SWI Prolog 中运行相同的查询集,例如, delete([(a,_), (b,_), (c,_)], (b,_), R).产量, R = [(a,_), (c,_)]正如我所料。

我的问题是,这是否是基于 delete/3 的某些特定“解释”的预期结果。谓词,或者它可能是 GNU Prolog 中的一个错误?

最佳答案

姓名 delete非常没有描述性。是否意味着删除所有等于 元素或全部 匹配 元素?如果是后者,我们正在删除的元素和列表元素之间的统一在移动到下一个列表元素时是否会进行或被撤消?

从上面的跟踪,特别是第二个查询,似乎 delete/3使用相等而不是统一(如您所知,匿名变量的每次出现都是不同的变量)。文档证实了这一点:

http://www.gprolog.org/manual/gprolog.html#sec213

确实没有错误,因为对于 delete/3 的独特语义没有达成共识。谓词。至多,有一个共识是库谓词的坏名字。只是一个在任何 Prolog 库中都应该避免的谓词名称。也就是说,与旧代码的兼容性通常会导致它的存在。

关于prolog - GNU Prolog `delete/3` 谓词中的异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29289228/

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