【问题标题】:Scheme - adding values to list recursively方案 - 递归地添加值到列表
【发布时间】:2016-10-21 04:17:32
【问题描述】:

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

我定义了一个空列表:

(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)。有什么问题?

感谢您的帮助。

【问题讨论】:

    标签: list recursion append scheme


    【解决方案1】:

    问题是 (append empt x) 没有修改empt 的值。因此,您只是通过recapp X(原始参数值)次传递empt(值'())。

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

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

    【讨论】:

    • iota 实际上并不是一个原语。它由 SRFI 1 提供。例如,Racket 提供了range(与iota 的参数顺序不同)。
    • 谢谢!!不幸的是,我还不能向上投票你的答案:/
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多