【问题标题】: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)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-02-25
        • 2014-08-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-01-13
        相关资源
        最近更新 更多