如何告诉 Prolog 特定元组不在列表中

问题描述 投票:0回答:1

所以我试图告诉 prolog,Lst 中有一个带有 (a,b,) 的元组,但最后一个元组成员不是 2,但 Lst 中还有其他元素可能包含 (,_,2)。

`测试(A,B,C):- 长度(Lst, 2), 成员((A,B,C),Lst),

member((c,d,_), Lst),
member((a,b,F), Lst),
F \= 2,
member((_,_,2), Lst),
member((_,_,3), Lst).`

当我查询 test(c,d,2) 时,它返回 false。

`测试(A,B,C):- 长度(Lst, 2), 成员((A,B,C),Lst),

member((c,d,_), Lst),
member((a,b,F), Lst),
F \= 2,
member((_,_,2), Lst),
prolog swi-prolog
1个回答
0
投票

来自 SWI Prolog 文档 \= 可通过查询

?- help(\=).
获得:

如果其参数被充分实例化,则该谓词在逻辑上是合理的

您的

F
未实例化(它未绑定到任何值,因此您无法判断它不是某个特定值)。

为了使您的程序在参数尚未充分实例化的情况下也能正常工作,请改用 diff/2。

F \= 2
更改为
dif(F, 2)

© www.soinside.com 2019 - 2024. All rights reserved.