【发布时间】:2016-06-07 10:28:33
【问题描述】:
由于我想避免append/3 的成本,我使用差异/开放列表。
然而,打开列表的问题是member/2 通过将元素添加到尾部来对打开列表做出反应。例如:
?- L=[a|_],member(b,L).
L = [a, b|_G1196] ;
L = [a, _G1195, b|_G1199] ;
L = [a, _G1195, _G1198, b|_G1202] ;
L = [a, _G1195, _G1198, _G1201, b|_G1205] ;
L = [a, _G1195, _G1198, _G1201, _G1204, b|_G1208] ;
L = [a, _G1195, _G1198, _G1201, _G1204, _G1207, b|_G1211]
这是正确的行为,因为打开的列表有一个无限的“尾部”,member/2 函数将此尾部/孔(变量)与成员的第一个参数统一起来。
不过,我正在寻找一种方法来检查打开列表中是否有一个元素等于给定元素。我该怎么做?
【问题讨论】:
-
请出示一些代码。