方案列表中的重复条目

时间:2015-11-14 21:59:09

标签: list scheme double racket

我正在尝试使用Scheme:

复制列表中的所有条目

这是我的代码:

(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和其他逻辑运算符等命令。< / p>

1 个答案:

答案 0 :(得分:1)

第二个条件的处理方式有点不同,实际上,当我们到达一个原子时,我们必须停止它,但是当我们到达一个第一个元素是原子的列表时 - 我们可以这样做根据需要重建输出列表。试试这个:

(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)))))