recursion - 如何递归打印列表的元素两次?

标签 recursion lisp

我需要编写一个递归函数来打印列表的元素两次。例如, rdouble '(1 2 3) 将打印 (1 1 2 2 3 3),rdouble'(1 (2 3) 4) 将打印 (1 1 (2 2 3 3) 4 4)。

到目前为止我已经:

(defun rdouble(struct)
 (cond
     ((atom struct) struct)
     (t (cons (rdouble (car struct)) (cons (car struct) 
              (rdouble (cdr struct))
        )))))

这对于第一个示例来说效果很好,但会打印

(1 1 (2 2 3 3) (2 3) 4 4)

第二个例子。如何继续打印每个元素两次但不重新打印(2 3)?我做错了什么以及如何解决它?

最佳答案

该表达式有三种不同的情况:

  1. 一个原子 -> 返回它
  2. 以原子作为 CAR 的 cons -> 将其加倍
  3. 一个缺点与一个缺点作为汽车 -> 走下来

您的代码仅处理两种情况,其中第二种情况混合了 2 和 3。

关于recursion - 如何递归打印列表的元素两次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4139622/

相关文章:

c++ - boolean 类型的递归

c++ - C++ 中的内存仿函数包装器

c# - 如何在游戏中拥有局部位置和全局位置

scheme - 对象 ____ 不适用

php - 通过 PHP 中的目录树递归

Mysql递归查询/余弦球面定律

lisp - 在子列表中查找总和

package - Clisp 找不到包

scheme - 括号中的值不在方案中评估

scheme simple stream-map 在 SICP 示例中不起作用