计划列表中的重复条目

Scheme duplicate entries in a list

我正在尝试使用方案复制列表中的所有条目:

这是我的代码:

(define double
  (lambda (l)
    (cond [(null? l) '()]
          [(not (pair? l)) (list l l)]
          [else (cons (double (car l)) (double (cdr l)))])))

如果我的输入是 (double '(a((b)(c d)(((e)))))),我会返回 ((a a) (((b b)) ((c c) (d d)) ((((e e))))))

我想得到(a a((b b)(c c d d)(((e e))))).

我该怎么做?如果我将 cons 替换为 appendlist,它会更加混乱。我只能使用你在上面看到的命令和命令,例如 let(和 let 的其他变体)、mapatomif 和其他逻辑运算符。

第二个条件必须以不同的方式处理才能起作用,本质上,我们必须不是在到达原子时停止,而是在到达其第一个元素是原子的列表时停止——以这种方式我们可以根据需要重建输出列表。试试这个:

(define double
  (lambda (l)
    (cond [(null? l) '()]
          [(not (pair? (car l)))
           (cons (car l)
                 (cons (car l)
                       (double (cdr l))))]
          [else (cons (double (car l))
                      (double (cdr l)))])))

现在它按预期工作了:

(double '(a ((b) (c d) (((e))))))
=> '(a a ((b b) (c c d d) (((e e)))))