0

我有点像序言菜鸟,这就是我在这里问的原因,我在其他地方找不到分析器。

我想做的事情是以不同的方式实现这个功能:

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

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

现在我想用append创建这个函数,所以不是递归,而是一个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.

对此的任何帮助将不胜感激:)。

4

1 回答 1

2

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

为了识别列表的第一个元素(头,你知道),我们使用[Head|_],其中下划线,一个匿名变量,保留为未指定(无趣)列表的尾部。

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

firstlast(L) :- append([Elem|_], [Elem], L).
于 2013-10-09T22:23:37.333 回答