以递归方式反向列出

时间:2016-12-18 00:13:29

标签: recursion lisp

这是一个在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单元的头部(车)?

1 个答案:

答案 0 :(得分:1)

决赛的开头是零,你每次都只是将列表的第一个元素包含在其中。 例如你有一个列表'(a b c),第一次运行将使最终成为'(a),递归调用将相应地为(rev1'(b c)'(a))。

然后它是这样的: (rev1'(c)'(b a))

这种情况继续,当列表为零时,最终变量是'(c b a),这是你想要的。