我是学生,我对 amzi prolog 有疑问。我们在课堂上了解到,如果项目是列表中的成员,则有一个谓词返回 true:
member(1,[1,2,3])
应该返回真。
然而我却是假的。
难道我做错了什么?
请帮忙。
问候,身份证
我是学生,我对 amzi prolog 有疑问。我们在课堂上了解到,如果项目是列表中的成员,则有一个谓词返回 true:
member(1,[1,2,3])
应该返回真。
然而我却是假的。
难道我做错了什么?
请帮忙。
问候,身份证
安齐!Prolog 的内置谓词is_member/2
,根据其文档,是确定性的,并且只是测试成员资格。它不会在回溯时返回列表的所有成员:
is_member/2
是经典member/2
谓词(在 LIST.PLM 库中)的受限版本,如果 Term 是 List 的成员,则 [sic] 可用于快速测试。它使用强大的 unify (==
) 来测试元素。它不能用于回溯列表的各个成员。定义等价于:is_member(X, [Y|_]) :- X == Y, !. is_member(X,[_|Z]) :- is_member(X,Z).
正如@hardmath 在另一个答案中指出的那样,经典member/2
是Amzi 的一部分!Prolog 的列表库。但是,Prolog [大部分] 是用 Prolog 编写的,因此您可以轻松地自己member/2
导入列表库:
member( X , [X|_] ) .
member( X , [_|Xs] ) :- member(X,Xs) .