我尝试在递归中编写prolog列表的前两个元素。 例如:
如果我有
List:[a,b,c,d,e,f]
当我进入
first_two(F,S,List).
It returns
F:a, S:b ;
F:b, S:c ;
F:c, S:d ;
F:d, S:e ;
F:e, S:f .
我试着这样做:
first_two(F,S,[F|[S|Tail]]):-first_two(F,S,Tail).
但它失败了..
非常感谢..
答案 0 :(得分:2)
如果您只想要前两个,那么您的解决方案非常接近,但不需要递归:
first_two( F, S, [F|[S|_]] ).
答案 1 :(得分:2)
你忘记了递归的基本情况,即终止条件:
first_two(F, S, [F, S|_Tail]).
first_two(F, S, [_|Tail]) :-
first_two(F, S, Tail).
我还使用友好的语法和间距简化了您的规则。
我更喜欢简单的代码阅读,不是吗?