Racket 球拍复印机功能
我正在用racket写一个复制函数。replicator函数获取符号和数字L的嵌套列表,并通过在所有级别“立即复制”每个原子(符号或数字)来生成符号和数字的嵌套列表。 例如: (复印机’(a1b2c3))产生(a11b2c3), (复印机’((a 1)b((c))2)产生((a 1)b b((c))2) 以下是我的功能:Racket 球拍复印机功能,racket,Racket,我正在用racket写一个复制函数。replicator函数获取符号和数字L的嵌套列表,并通过在所有级别“立即复制”每个原子(符号或数字)来生成符号和数字的嵌套列表。 例如: (复印机’(a1b2c3))产生(a11b2c3), (复印机’((a 1)b((c))2)产生((a 1)b b((c))2) 以下是我的功能: (define (duplicator ls) (if (null? ls) '() (cons (car ls) (con
(define (duplicator ls)
(if (null? ls)
'()
(cons (car ls)
(cons (car ls)
(duplicator (cdr ls))))))
我的问题是,(复印机’((a1)b((c))2))的输出是’((a1)(a1)b((c))((c))2),这不是我想要的。
有人能告诉我怎么做吗?这里有一个解决方案:
(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)
您需要设置当前元素本身是否为列表的条件。如果是,则不应复制,而是以内部列表为参数递归调用复制函数。只有在处于最低级别时才会发生复制。我不太熟悉Racket语法,但我会尝试解决它。