2010-11-18 105 views
0

问题只是...为什么这不起作用?序言,递归函数,并通过函数的参数返回值

replace([l|[r|[r|[l|R]]]], Result) :- append([f,f],R,Result). 

replace([HEAD|TAIL], Result) :- replace(TAIL, Y), append(HEAD,Y,Result). 

?- replace([l,r,r,l,r,r],X).

回报

X = [f, f, r, r] .

?- replace([r,l,r,r,l,r,r],X).

false

为什么不是X = [r, f, f, r, r] .

请大家帮忙。


PS。我仍然在学习英语,但有时我犯了愚蠢的错误。我尽我最大努力,用英语写问题和答案,但如果您在出现任何错误时编辑我的帖子,我将非常高兴。我保证,你的努力不会被浪费。

回答

2

您需要append([HEAD],Y,Result)而不是append(HEAD,Y,Result)。 HEAD不是本身的列表。

+0

哇......谢谢..现在它是如此的明显:) – noisy 2010-11-18 03:04:01