[英]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.