簡體   English   中英

球拍重復

[英]Duplication in Racket

我在復制符號時遇到問題。 基本上我有一個列表,我需要用與您傳遞的列表中的元素數量相同的符號 @ 將其包圍。

例如:

(display(frontenddupe '@ '((! % % % !)(! % ! % !))))

我想得到以下 output:

((@ @ @ @ @)(! % % % !)(! % ! % !)(@ @ @ @ @))

這是我到目前為止的代碼:

(define (frontenddupe s lst)
 (define (duplicate n s)
  (cond`]
    [(zero? n) '()]
    [else (append (list s (duplicate (- n 1) s)))]))

(append (list (list (duplicate (length lst) '@ ))(list s) lst (list (list s)))))

我知道這是完全錯誤的,但我完全不知道如何解決它。

您可以在不使用顯式遞歸的情況下編寫解決方案,只需使用一些內置過程 - 如下所示:

(define (frontenddupe s lst)
  (let* ([len (length (first lst))] ; assuming all lists have same length
         [dup (build-list len (λ (n) s))])
    (append (cons dup lst) (list dup))))

它按預期工作:

(frontenddupe '@ '((! % % % !) (! % ! % !)))
=> '((@ @ @ @ @) (! % % % !) (! % ! % !) (@ @ @ @ @))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM