【发布时间】:2017-03-22 20:11:25
【问题描述】:
我被要求编写一个球拍函数 repeat-str,它使用长度为 n 的字符串 s,并生成一个长度为 n 的新列表。如果 n 为 0,则生成空列表。如果 n 大于 0,则列表中的第一个字符串包含 n 的 n 个副本,第二个将是 n-1,因此是第四个。
例如:(repeat-str "cat") => (list "catcatcat" "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 个单独的列表,然后将它们全部附加到最后。
** 不能使用:
- 占位符函数
- 拉姆达
- 复制功能
使用带有列表缩写的初学者
谢谢。
【问题讨论】:
-
在闭包中使用
s创建一个辅助函数,并以n作为参数,这样您就可以知道字符串中有多少副本以及何时停止。然后就使用它。