Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Recursion 拍子重复_Recursion_Racket - Fatal编程技术网

Recursion 拍子重复

Recursion 拍子重复,recursion,racket,Recursion,Racket,我复制符号时遇到问题。基本上我有一个列表,我需要用和你传递的列表中元素数量相同的符号@来包围它 例如: (显示(frontenddupe'@'(!%%)(!%%)!%!)) 我想得到以下结果作为输出: ((@@@@)(!%%%!)(!%%!)(@@@@@)) 这是我迄今为止的代码: (define (frontenddupe s lst) (define (duplicate n s) (cond`] [(zero? n) '()] [else (append (list

我复制符号时遇到问题。基本上我有一个列表,我需要用和你传递的列表中元素数量相同的符号@来包围它

例如:

(显示(frontenddupe'@'(!%%)(!%%)!%!))

我想得到以下结果作为输出:

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

这是我迄今为止的代码:

(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 '@ '((! % % % !) (! % ! % !)))
=> '((@ @ @ @ @) (! % % % !) (! % ! % !) (@ @ @ @ @))

您可以编写一个解决方案,而无需使用显式递归,只需使用一些内置过程—如下所示:

(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 '@ '((! % % % !) (! % ! % !)))
=> '((@ @ @ @ @) (! % % % !) (! % ! % !) (@ @ @ @ @))

为什么预期输出中的第四个子列表包含更多参数<代码>((@@@@))@谢谢你,这是我的错误。它应该是
(@@@@@))
现在已经修复了为什么预期输出中的第四个子列表包含更多参数<代码>((@@@@))@谢谢你,这是我的错误。它应该是
(@@@@@))
现在只使用第一个子列表的长度就可以修复它了?我不敢做出同样的假设,但想不出对这个问题的任何其他合理解释。是的,我正在做出这个假设,我会把它说清楚的。在这个问题上没有足够的信息来思考其他问题。我更喜欢
(λ(n)s)
成为
(λ()s)
,或者是否存在另一种“忽略”绑定的球拍约定?是的,这也是一个很好的建议。但是我更希望看到一些变量名,在这种情况下,
()
看起来很奇怪;)我喜欢Oscar的答案总是与“实际上不必使用递归;试试这个:这里有很棒的代码示例”这句话类似,仅仅使用第一个子列表的长度?我不敢做出同样的假设,但想不出对这个问题的任何其他合理解释。是的,我正在做出这个假设,我会把它说清楚的。在这个问题上没有足够的信息来思考其他问题。我更喜欢
(λ(n)s)
成为
(λ()s)
,或者是否存在另一种“忽略”绑定的球拍约定?是的,这也是一个很好的建议。但是我更希望看到一些变量名,在这种情况下,
()
看起来很奇怪;)我喜欢奥斯卡的答案总是与“你实际上不必使用递归;试试这个:这里有很棒的代码示例”类似