【发布时间】:2013-11-23 20:51:29
【问题描述】:
我是 Prolog 的新手,我在理解递归时遇到了一些麻烦。我正在尝试编写一个关系来查找两个排序列表的交集,而不使用 SWI 的内置相交。我已经使用跟踪来查看发生了什么,并且它的行为与我预期的一样,直到我希望它终止并返回包含交集的新列表。这让我认为我的基本情况是错误的。我已经尝试了几种不同的方法来形成基本案例,但并没有取得成果。我一直使用列表 [1, 2, 3, 4] 和 [2, 4, 6] 作为具有以下关系的测试用例(顶部的基本用例只是我作为占位符放入的一个......它根本不起作用):
intersectS([], [], []).
intersectS([A | B], [C | D], Z) :- A < C, intersectS(B, [C | D], Z).
intersectS([A | B], [C | D], Z) :- A > C, intersectS([A | B], D, Z).
intersectS([A | B], [C | D], Z) :- A = C, append(Z, [A], Y), intersectS(B, D, Y).
感谢任何帮助。我已经看到了将 cut (!) 运算符与成员/非成员一起使用的示例,但我应该利用列表已排序这一事实,所以我想我会尝试这种方法。提前致谢。
【问题讨论】:
标签: prolog