1

我想比较两个列表,同时考虑和比较它们的每一个子项。例如,如果我有列表[1, t1(2, t2(3), 4)]and [1, t1(2, t2(2), 4)],结果应该是第一个大于 ( >) 比第二个更大,因为3 > 2在 terms t2(这是 term 的一部分t1)。
我想到了这样的事情:

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

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

编辑:
对不起,我忘了提到我想在算术上比较数字,按标准顺序比较所有其他术语。这就是为什么我有点卡住了。

4

1 回答 1

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

于 2018-07-11T07:59:25.560 回答