这是一个在lisp中递归反转列表的代码:
( defun rev1( list final )
( if ( eq list () )
final
( rev1( cdr list ) ( cons ( car list ) final ) ) ) )
( defun rev( list )
( rev list nil ) )
有人可以解释一下cons小区和变量final之间的分配是如何工作的吗?它指向那个cons单元的头部(车)?
答案 0 :(得分:1)
决赛的开头是零,你每次都只是将列表的第一个元素包含在其中。 例如你有一个列表'(a b c),第一次运行将使最终成为'(a),递归调用将相应地为(rev1'(b c)'(a))。
然后它是这样的: (rev1'(c)'(b a))
这种情况继续,当列表为零时,最终变量是'(c b a),这是你想要的。