因此,在下面提供的我的方案函数中,我需要生成一个结构列表。到目前为止,我已经制作了2个辅助函数:一个调用从1到x的数字列表。另一个调用与x对应的结构。
例如:
(helper1 10) -> (list 1 2 3 4 5 6 7 8 9 10)
(helper2 1) -> (make-person 0 1)
(helper2 2) -> (make-person 1 2)
(helper2 3) -> (make-person 2 3) etc...
如何让我的main函数调用helper1列表,其中每个元素都被替换为相应的结构。
注意:我的main函数必须是递归的,它必须生成一个结构列表。
到目前为止,我的主要功能是:
(define (main-function x)
(cond
[(zero? x) empty]
[else
...]))
另外,我正在使用列表缩写在初级学生中写作。
答案 0 :(得分:0)
您希望构建一个全新的列表,而不是用结构替换每个元素。这是最终结果的出现,但不是该功能的工作原理。
基本上,如果你的main-function
接收了一个数字,那么你将要创建一个实际执行递归的辅助函数,在那里你将传入调用(helper1 x)
的结果。
然后,在您的递归中,您只是使用相应的结构重新构建列表。
(define (main-function x)
(main-function-helper (helper1 x)))
(define (main-function-helper l)
(cond
[(empty? l) l]
[else (cons (helper2 (first l))
(main-function-helper (rest l)))]))
另一个可能更有意义的选择是永远不要创建中间列表:
(define (main-function x)
(main-function-helper 1 x))
(define (main-function-helper counter max)
(cond
[(= counter max) (cons (helper2 counter) empty)]
[else (cons (helper2 counter)
(main-function-helper (add1 counter) max))]))