Prolog member/2 谓词
Prolog member/2 predicate
为什么序言回答错误:member([5], [2, 5]).
?
有办法解决吗?
任何帮助将不胜感激。
如 member/2 的 SWI Prolog 文档中所述:
member(?Elem, ?List )
True if Elem
is a member of List
.
谓词是成员。它不是 subset 或 sublist 或 subsequence。如果第一个参数是第二个参数中给出的列表的成员(即 元素 ),则它会成功。元素 [5]
不是列表 [2, 5]
的成员,因为元素 [5]
不是 2 也不是 5。但是,[5]
将是列表的成员列表 [2, [5]]
,因此 member([5], [2, [5]])
会成功。
Why does Prolog answer false to: member([5], [2, 5]).
?
让我们问问 Prolog 为什么!下载 library(diadem)
到您的工作目录并:
?- use_module(diadem).
true.
?- member([5], [2,5]).? Expl.
Expl = member([_|_], [2, 5])
; ...
它不仅失败了,而且 [5]
的泛化 fails:instead 也失败了,这是一个只有一个元素 5 的列表,我们现在至少有一个元素 - 不管是哪个。所以我们可以将 Expl
的值作为仍然失败的查询。因此,剩下的目标中的某些东西一定是罪魁祸首。
?- member([_|_], [2, 5]).
false.
另请注意未概括的内容:这两个元素仍然存在!如果它们是变量,查询就会成功!稍微概括一下查询:
?- member([5], [2, Any]).
Any = [5].
现在成功了!
可能是您正在寻找另一个谓词?
来自 subset/2 的 SWI Prolog 文档:
subset( +SubSet, +Set )
True if all elements of SubSet belong to Set as well.
它按预期工作:
Welcome to SWI-Prolog (threaded, 64 bits, version 7.5.5)
SWI-Prolog comes with ABSOLUTELY NO WARRANTY. This is free software.
?- subset([5], [2, 5]).
true.
?- subset([5, 3], [2, 3, 5, 7]).
true.
?- subset([5, 3], [2, 5]).
false.
为什么序言回答错误:member([5], [2, 5]).
?
有办法解决吗?
任何帮助将不胜感激。
如 member/2 的 SWI Prolog 文档中所述:
member(?Elem, ?List )
True if
Elem
is a member ofList
.
谓词是成员。它不是 subset 或 sublist 或 subsequence。如果第一个参数是第二个参数中给出的列表的成员(即 元素 ),则它会成功。元素 [5]
不是列表 [2, 5]
的成员,因为元素 [5]
不是 2 也不是 5。但是,[5]
将是列表的成员列表 [2, [5]]
,因此 member([5], [2, [5]])
会成功。
Why does Prolog answer false to:
member([5], [2, 5]).
?
让我们问问 Prolog 为什么!下载 library(diadem)
到您的工作目录并:
?- use_module(diadem).
true.
?- member([5], [2,5]).? Expl.
Expl = member([_|_], [2, 5])
; ...
它不仅失败了,而且 [5]
的泛化 fails:instead 也失败了,这是一个只有一个元素 5 的列表,我们现在至少有一个元素 - 不管是哪个。所以我们可以将 Expl
的值作为仍然失败的查询。因此,剩下的目标中的某些东西一定是罪魁祸首。
?- member([_|_], [2, 5]).
false.
另请注意未概括的内容:这两个元素仍然存在!如果它们是变量,查询就会成功!稍微概括一下查询:
?- member([5], [2, Any]).
Any = [5].
现在成功了!
可能是您正在寻找另一个谓词?
来自 subset/2 的 SWI Prolog 文档:
subset( +SubSet, +Set )
True if all elements of SubSet belong to Set as well.
它按预期工作:
Welcome to SWI-Prolog (threaded, 64 bits, version 7.5.5)
SWI-Prolog comes with ABSOLUTELY NO WARRANTY. This is free software.
?- subset([5], [2, 5]).
true.
?- subset([5, 3], [2, 3, 5, 7]).
true.
?- subset([5, 3], [2, 5]).
false.