Recursion Drracket中的递归
我被要求编写一个racket函数repeat str,它使用长度为n的字符串s,并生成长度为n的新列表。如果n为0,则生成空列表。如果n大于0,列表中的第一个字符串包含n的n个副本,第二个将是n-1,因此第四个 例如:Recursion Drracket中的递归,recursion,racket,Recursion,Racket,我被要求编写一个racket函数repeat str,它使用长度为n的字符串s,并生成长度为n的新列表。如果n为0,则生成空列表。如果n大于0,列表中的第一个字符串包含n的n个副本,第二个将是n-1,因此第四个 例如:(重复str“cat”)=>(列出“catcat”“catcat”“cat”) 我所拥有的: (define (repeat-str s) (cond [(zero? (string-length s)) empty] [(equal? (string-len
(重复str“cat”)=>(列出“catcat”“catcat”“cat”)
我所拥有的:
(define (repeat-str s)
(cond
[(zero? (string-length s)) empty]
[(equal? (string-length s) 1) s]
[else (make-list (string-length s) s)
(repeat-str (make-list (sub1 (string-length s)) s))]))
我试图调用函数以在第二个列表中获得n-1,但我不确定如何执行递归部分。这样我就可以得到3个单独的列表,然后将它们全部附加到末尾
**无法使用:
-占位符函数-兰姆达 -复制功能 使用带列表缩写的初学者 谢谢。这里有一种方法:
(define (repeat-str str)
(define (sub cnt rep)
(if (zero? cnt)
null
(cons rep (sub (- cnt 1) (string-append rep str)))))
(reverse (sub (string-length str) str)))
您还可以使用
for/list
和可用的内置功能:
(define (f s)
(reverse
(for/list ((i (string-length s)))
(apply string-append (make-list (add1 i) s)))))
测试:
(f "cat")
输出:
'("catcatcat" "catcat" "cat")
创建一个helper函数,在其闭包中使用
s
和n
作为参数,这样您就可以知道字符串中有多少个副本以及何时停止。那就用这个吧。