考虑到子项目,如何在Prolog中比较两个列表?

时间:2017-03-26 23:12:44

标签: prolog compare comparison term sicstus-prolog

我想比较两个列表,同时考虑和比较每个子项目。例如,如果我有列表[1, t1(2, t2(3), 4)][1, t1(2, t2(2), 4)],则结果应该是第一个列表比第二个列表更大(>),因为3 > 2就其而言t2(这是t1一词的一部分) 我想到了这样的事情:

cmp([1, t1(2, t2(3), 4)], [1, t1(2, t2(2), 4)], X).
X = >

因此输入将是两个列表,输出是一个数学符号,表示它们之间的关系 也许我的问题有点混乱,但这可以以某种方式完成吗?

修改:
对不起,我忘了提一下,我想用算术比较数字,按标准顺序比较所有其他条款。这就是我陷入困境的原因。

1 个答案:

答案 0 :(得分:1)

我相信您正在寻找的是compare / 3谓词[1]。这是一种标准的Prolog方法,因此我刚刚在SICStus Prolog上对其进行了测试,但是正如您从[1]所看到的,它也可以在swi prolog中使用。

| ?- compare(X,[1, t1(2, t2(3), 4)], [1, t1(2, t2(2), 4)]). 
X = > ? 
yes

[1]-http://www.swi-prolog.org/pldoc/man?predicate=compare/3