Recursion 在Prolog中添加尾部
我很难理解prolog如何处理列表。我正在尝试编写一个函数,该函数将向给定列表添加一个尾部并返回一个新列表。但是我的实现不起作用,我不知道如何修复它。以下是我所拥有的:Recursion 在Prolog中添加尾部,recursion,prolog,tail,Recursion,Prolog,Tail,我很难理解prolog如何处理列表。我正在尝试编写一个函数,该函数将向给定列表添加一个尾部并返回一个新列表。但是我的实现不起作用,我不知道如何修复它。以下是我所拥有的: % add_tail(L,M,E) :- L is M with [E] appended. % I wanna do this without using the append predicate add_tail([E],[],E). add_tail(List, [H|T], E):- add_tail(List
% add_tail(L,M,E) :- L is M with [E] appended.
% I wanna do this without using the append predicate
add_tail([E],[],E).
add_tail(List, [H|T], E):-
add_tail(List1, T, E),
List is [H|List1].
为了阐明我希望该函数做什么,下面是一个输出示例:
?- add_tail(L,[1,2,3],4).
L = [1,2,3,4].
退房:
第二行(append([],X,X)
)简单地说明将元素X
附加到空列表等于该元素本身(中断条件)。第一行表示将Z
添加到列表[X | Y]
(X
是头,Y
rest)将生成一个新列表[X | W]
,而W
是将Z
添加到Y
的结果
示例
?- append([1,2,3],[4],L).
L = [1,2,3,4]
在您的情况下,您只需要重新排列参数 实际上,你的定义有一个错误。将元素
X
附加到空列表的末尾[]
应生成一个列表,而不是元素X
本身。@WillNess示例不正确。此规则假定所有参数都是列表。如果我的事实返回[X]而不是X,我会得到类似于[1,2,3,4]的东西。请检查。这是相关的。
?- append([1,2,3],[4],L).
L = [1,2,3,4]