【问题标题】:List reverse recursively递归列出反向
【发布时间】:2016-12-18 00:13:29
【问题描述】:

这是一个在 lisp 中递归地反转列表的代码:

( defun rev1( list final )
    ( if ( eq list () )
    final
        ( rev1( cdr list )  ( cons ( car list ) final ) ) ) )

( defun rev( list )
   ( rev list nil ) )

谁能解释一下 cons cell 和变量 final 之间的赋值是如何工作的?它是指向那个 cons 单元的头部( car )的指针吗?

【问题讨论】:

    标签: recursion lisp


    【解决方案1】:

    final 在开头是 nil ,每次你只需将列表的第一个元素添加到它上面。 例如你有一个列表说'(a b c),第一次运行将使最终成为'(a),递归调用将是(rev1'(b c)'(a))。

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

    这样继续,当列表为 nil 时,最终变量是 '(c b a),这就是你想要的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-09-23
      • 2011-12-19
      • 2013-03-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多