Prolog在具有首选项的列表列表中查找元素

时间:2016-04-30 21:21:09

标签: list prolog find

我有以下列表列表:

L = [[Q,w,E,],[Q,w,Z,r],[A,s,D,f]]

我知道前两个,我需要得到其余的。 例如,我有Q,w,我需要得到Z,r或E,r。 我想以某种方式告诉我优先考虑我总是希望touple包含Z,但如果不存在则给我E,r。

我试过了:

member([Q,w,Z,VB],[[Q,w,E,o],[Q,w,Z,r],[A,s,D,f]]).

但总是给我Z = E, VB = o

1 个答案:

答案 0 :(得分:0)

首先你需要知道Prom与变量之间的区别,你可以阅读它们的语法here
现在,如果你想要一个以大写字母开头的原子列表,你必须用单引号将它们括起来,否则prolog会将它们解释为变量。
现在,如果您修复了咨询的语法,您将得到以下结果:

?- member(['Q',w,Z,VB],[['Q',w,'E',o],['Q',w,'Z',r],['A',s,'D',f]]).

VB = o,
Z = 'E'
VB = r,
Z = 'Z'
false

注意在这种情况下,我在单引号中包含所有以大写字母开头的原子,Z谓词的第一个参数中的VBmember/2除外在这种情况下,它们作为变量由prolog实例化,其中包含完成此案例所需的原子。