我正在使用球拍编写复制器功能。复制器函数采用嵌套的符号和数字L列表,并通过&#34生成符号和数字的嵌套列表;立即复制"各级的每个原子(符号或数字)。 例如: (复制器'(a 1 b 2 c 3))产生(a a 1 1 b b 2 2 c c 3 3), (复制器'((a 1)b((c))2)产生((a a 1 1)b b((c c))2 2)。
这是我的功能:
(define (duplicator ls)
(if (null? ls)
'()
(cons (car ls)
(cons (car ls)
(duplicator (cdr ls))))))
我遇到的问题是(复制器'((a 1)b((c))2))的输出是'((a 1)(a 1)bb((c) )((c))2 2),这不是我想要的。 谁能告诉我如何做到正确,拜托?
答案 0 :(得分:1)
这是一个解决方案:
(define (duplicator ls)
(cond ((null? ls) '())
((list? (car ls)) (cons (duplicator (car ls)) (duplicator (cdr ls))))
(else (cons (car ls) (cons (car ls) (duplicator (cdr ls)))))))
(duplicator '((a 1) b ((c)) 2)) ; produces ((a a 1 1) b b ((c c)) 2 2)