【问题标题】:Duplicate n times an element from a list in Racket从 Racket 的列表中复制 n 次元素
【发布时间】:2020-11-19 16:52:40
【问题描述】:
例如:
(duplicate 3 (list 1 2 3)) = (list 1 1 1 2 2 2 3 3 3)
我试过这个:
(define (duplicate n l)
(cond [(zero? n) empty]
[else (cons l (duplicate (sub1 n) l))]))
但它给了我:
(duplicate 2 (list 1 2)) = (list (list 1 2) (list 1 2))
【问题讨论】:
标签:
list
recursion
racket
【解决方案1】:
其实你已经成功了一半。您创建的内容是一个元素和一个计数,并列出了这么多元素。
(duplicate 3 'e) ; ==> (3 3 3)
这意味着你可以使用它:
(duplicate-list 3 l)
; ==> (append (duplicate 3 (car l))
; (duplicate-list 3 (cdr l)))
【解决方案2】:
(define (duplicate n x)
"Repeat x n times."
(cond [(zero? n) empty]
[else (cons x (duplicate (sub1 n) x))]))
(define (mappend fn . lists)
"map but appending the results."
(apply append (apply map fn lists)))
(define (duplicate-list n l)
"duplicate each element in l."
(mappend (lambda (x) (duplicate n x)) l))
然后
(duplicate-list 3 (list 1 2 3))
;; '(1 1 1 2 2 2 3 3 3)