我的Scheme函数:如何使其递归

时间:2014-11-03 20:29:45

标签: recursion scheme racket

因此,在下面提供的我的方案函数中,我需要生成一个结构列表。到目前为止,我已经制作了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 
     ...]))

另外,我正在使用列表缩写在初级学生中写作。

1 个答案:

答案 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))]))