Scheme - 递归地向列表添加值

时间:2016-06-20 01:29:31

标签: list recursion append scheme

我正在尝试在scheme中创建一个函数,以递归方式将值添加到空列表中。

我已经定义了一个空列表:

(define empty '() )

我已经定义了一个应该向列表中添加值的函数:

(define (recapp empt x)
    (if (= 0 x)
      empt
      (begin
         (append empt x)
         (recapp empt (- x 1)))))

当我进入Scheme(recapp empty 5)时,我得到一个空列表,即使我想获得(1 2 3 4 5)。有什么问题?

感谢您提供帮助。

1 个答案:

答案 0 :(得分:1)

问题是(append empt x)不会修改empt的值。因此,您只是将empt(值'())传递给recapp X(原始参数值)次。

(define (recapp empt x)
    (if (= 0 x)
      empt
      (recapp (cons x empt) (- x 1))))

更接近你想要的。另请注意,主要iota具有类似的功能。