gpt4 book ai didi

prolog - member(b,X) 到底是什么?

转载 作者:行者123 更新时间:2023-12-01 15:56:15 28 4
gpt4 key购买 nike

今天我遇到了这个查询:

?- member(b,X).

程序是:

member(X,[X|_]).   
member(X,[_|T]) :-
member(X,T),
!.

当我运行查询时,我得到了这些答案:

?- member(b,X).
X = [b|_G1560] ;
X = [_G1559, b|_G1563].

那到底是什么?这个查询有什么作用?

最佳答案

查询 member(b,X) 生成包含 b 的列表。由于第二个参数未实例化,因此您有(理论上)无限数量的解决方案。第一个解决方案的第一个位置是 b,第二个解决方案的第二个位置是 b,依此类推。此外,如果您仔细查看任何解决方案,您会发现它代表在该位置上带有 b 的任何列表。例如,第一个解决方案是 [b| _]。由于列表尾部未实例化(请参阅 member/2 谓词基本情况),此解决方案与头部位置为 b 的任何列表统一。

如果你想让 member/2 具有确定性,即如果你只想使用谓词来检查一个术语是否是列表的成员,你需要添加一个切入基本子句,而不是@false 指出的递归子句:

member(Head, [Head| _]) :-
!.
member(Head, [_| Tail]) :-
member(Head, Tail).

生成的谓词通常命名为 memberchk/2 并且可以作为库谓词使用。

关于prolog - member(b,X) 到底是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23524941/

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