完成Scheme程序,(重复-st-lot lst),它接受一个非负inte的列表 热尔,并返回包含,为了一个列表,每个值表示的次数等于其数 值。见下面的例子。你可以在你的解决方案使用反向。您也可以使用辅助性亲 cedures在您的解决方案,而这个页面的更多的空间了。
注意:这不是作业。这是一个练习题,我无法得到答案
答案 0 :(得分:0)
我会给你一些提示,这样你就可以自己解决这个练习题,填补空白。您可以做的第一个也可能是最有用的事情是将问题分成两个程序。第一个,给定一个数字n
负责生成i
重复n
的列表:
(define (repeat n i)
(if (zero? i) ; if no more repeats are needed
<???> ; return the empty list
(cons <???> ; else cons `n` and advance the recursion
(repeat <???> ; `n` is left unchanged
<???>)))) ; but `i` is diminished by one
第二个过程使用前一个过程作为帮助,迭代输入lst
并合并repeat
生成的所有子列表的结果:
(define (repeats-a-lot lst)
(if (null? lst) ; if the list is empty
<???> ; return the empty list
(append (repeat <???> <???>) ; append n repetitions of current element
(repeats-a-lot <???>)))) ; and advance the recursion over the list
有几种可能的方法可以解决这个问题,有些更有意思(使用尾递归,使用折叠程序等),但是这种恕我直言是最简单的方法,因为它只需要知道一些基本的列表操作程序。无论如何,它按预期工作:
(repeats-a-lot '(1 2 3))
=> '(1 2 2 3 3 3)