编写列表的第一个元素

时间:2012-04-14 23:15:43

标签: list recursion prolog writing

我尝试在递归中编写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).

但它失败了..

非常感谢..

2 个答案:

答案 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).

我还使用友好的语法和间距简化了您的规则。

我更喜欢简单的代码阅读,不是吗?