使用append比较列表的第一个和最后一个元素

时间:2013-10-09 21:12:51

标签: prolog append

我有点像一个prolog noob,这就是为什么我在这里问,我找不到其他地方。

我想要做的是以不同的方式执行此功能:

firstlast([H,H]).
firstlast([F,_|T]):- firstlast([F|T]).

它基本上可以找出具有两个或更多元素的列表中的第一个和最后一个元素是否相同。

现在我想用append来创建这个函数,所以不要只递归一次调用而是递归。

append([],U,U).
append([H|T],U,[H|V]) :- append(T,U,V).

它应该如何工作的例子:

firslasta([1,2,3,4,1]).
true.

firstlasta([1,3,4,1,5]).
false-

firstlasta([2,5,2,3,6,2]).
true.

任何有关这方面的帮助都会非常有用:)。

1 个答案:

答案 0 :(得分:2)

这很容易,使用惯用的Prolog:

标识列表的第一个元素(Head,你知道),我们使用[Head | _],其中下划线,一个匿名var,留给未指定(不感兴趣)列表'尾部。

在长度为1的列表中,我们只有最后一个标识。然后将以Elem开头的列表附加到1 Elem列表:

firstlast(L) :- append([Elem|_], [Elem], L).