Prolog拆分列表

时间:2015-11-20 04:27:33

标签: list prolog

我需要在Prolog中创建一个split/4函数,我很确定我很接近,但是有一个我看不到的错误。该程序将采用一个列表,一个键和两个输出列表(小和大)。如果列表中的元素小于key,则将其放在较小的位置,否则将其放入big。

所以我现在拥有的是:

split([H|T], Key, [H|ST], Big) :- H < Key, split(T, Key, ST, Big).
split([H|T], Key, Small, [H|BT]) :- H >= Key, split(T, Key, Small, BT).

我可以假设列表和密钥是实例化的。如果有人能够指出我的错误会很棒!我想了解我做错了什么。

1 个答案:

答案 0 :(得分:3)

你唯一缺少的是一个基本案例。目前,当输入列表为空时,您的谓词无法执行任何操作,最终会在处理完所有列表项后对任何输入执行此操作。

split([], _, [], []).

只需添加此规则即可按预期工作。