为什么prolog会回答错误:header.find('a').get(5).simulate('click');
?
有办法解决它吗?
非常感谢任何帮助。
答案 0 :(得分:5)
为什么Prolog会回答错误:
member([5], [2, 5]).
?
让我们问Prolog为什么!将library(diadem)
下载到您的工作目录中,然后:
?- use_module(diadem).
true.
?- member([5], [2,5]).? Expl.
Expl = member([_|_], [2, 5])
; ...
它不仅失败而且泛化失败:我们现在只有至少一个元素 - 而不是[5]
,而不是Expl
。因此,我们可以将?- member([_|_], [2, 5]).
false.
的值作为仍然失败的查询。因此,剩余目标中的某些东西必须是罪魁祸首。
?- member([5], [2, Any]).
Any = [5].
另请注意不的概括之处:这两个元素仍在这里!如果它们是变量,查询就会成功!稍微概括一下查询:
Base::~Base()
现在它成功了!
答案 1 :(得分:3)
如member/2的SWI Prolog文档中所述:
成员( ?Elem ,?列表 )
如果
Elem
是List
的成员,则为真。
谓词是成员。它不是子集或子列表或子序列。如果第一个参数是第二个参数中给出的列表的成员(即元素),则成功。元素[5]
不是列表[2, 5]
的成员,因为元素[5]
不是2,而且它不是5.但是,[5]
会成为列表[2, [5]]
的成员,因此member([5], [2, [5]])
会成功。
答案 2 :(得分:0)
可能是你正在寻找另一个谓词? 来自subset/2的SWI Prolog文档:
子集( + SubSet , +设置 )
如果 SubSet 的所有元素也属于 Set ,则为True。
按预期工作:
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.