prolog,复制列表

v_a*_*tia 3 logic prolog

我试图让我的手臂围绕一些基本的序幕,但有点挣扎.具体来说 - 我试图通过项目列表并将其逐项复制到新列表中.我可以让它扭转,但我发现它没有倒转就踩到了它.

我一直在尝试以下 -

copy(L,R) :- accCp(L,R).

accCp([],R).
accCp([H|T],R) :- accCp(T,H).
Run Code Online (Sandbox Code Playgroud)

当我对此进行追踪时 - 我可以看到正在复制的各个项目,但它们会"丢失",并且不会形成一个增长的列表(在R,正如我希望的那样).我怎么能这样呢?

非常感谢

Kal*_*see 6

当原始列表为空时,您的基本案例需要将副本列表设置为空.然后,递归情况需要H从列表中获取L并将其添加到列表的头部R:

copy(L,R) :- accCp(L,R).
accCp([],[]).
accCp([H|T1],[H|T2]) :- accCp(T1,T2).
Run Code Online (Sandbox Code Playgroud)

当你打电话时copy,它会向下移动到基本情况,在那里它设置R为一个空列表.然后,当它恢复工作时,它会继续将H已知列表的头部附加[H|T1]到变量列表的开头[H|T2].它会在达到原始案例之前执行此操作,此时R包含完整副本L.