2014-03-12 28 views
0

我对Prolog非常陌生,我正在尝试使用'append'。我正在尝试编写一个非常简单的程序,将列表中的第一项添加到列表L中,并将其添加到空列表中。在Prolog中使用append

请问有人请向我解释为什么这样做不起作用?

add_first([A|_],L) :- append(A,_,L). 

另一个简短的问题。

为什么此代码有效?

add_first([A|B],L) :- append(B,A,L). 

但是这段代码不?

add_first([A|B],L) :- append(A,B,L). 

非常感谢。

+0

这些例子都没有,即使append按照您的想法工作,似乎也反映了您为'add_first'提供的口头定义。你能举一个你想让'add_first'成功工作的实例吗?这个描述意味着你想要'add_first([1,2,3],L)'产生'L = [1]'。但是你的'append'例子都涉及'[1,2,3]'的尾部,这在这种情况下看起来并不相关。 – lurker

回答

1

那么,A是列表的头[A|B]B是一个子列表。 A是一个元素,所以如果你读追加的定义:

append([],L,L). 
append([H|T],L2,[H|L3]) :- append(T,L2,L3). 

你会明白,列表的第一个参数是一个列表。所以你不能给一个元素。

append(A,B,L)是错误的。