我需要在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).
我可以假设列表和密钥是实例化的。如果有人能够指出我的错误会很棒!我想了解我做错了什么。
答案 0 :(得分:3)
你唯一缺少的是一个基本案例。目前,当输入列表为空时,您的谓词无法执行任何操作,最终会在处理完所有列表项后对任何输入执行此操作。
split([], _, [], []).
只需添加此规则即可按预期工作。