【问题标题】:Scheme - function that returns a growing listScheme - 返回一个不断增长的列表的函数
【发布时间】:2012-09-16 21:05:43
【问题描述】:

我在这里找不到类似的问题,但我正在尝试为一个类编写一个计划中的程序,因此非常感谢您的提示!我基本上对如何实现这一点感到困惑,但这里有一个关于它应该如何工作的例子。 (index 5) 应该返回列表(1 2 3 4 5)。我有几个想法,它们能奏效吗?

  1. 我将参数设为全局变量,每次递归调用该函数时都会递增。到目前为止,我遇到的问题是使用 set!返回一个列表,但输出看起来像这样 (#value #value....)

  2. 编写一个简单的递归函数,给出列表 (5 4 3 2 1) 然后反转它,但我能做到吗?

【问题讨论】:

    标签: list scheme


    【解决方案1】:

    我会选择解决方案 2,因为它是迄今为止最干净、最简单的选项。你只需要弄清楚递归。提示:基本情况到达(index 0),它应该返回空列表。之后的逆向可以通过将实际递归放入辅助函数中来完成:

    (define (index-r n)
      ...)
    
    (define (index n)
      (reverse (index-r n)))
    

    (或使用命名的-let 循环。)

    【讨论】:

    • 谢谢拉尔斯!不知道方案中有内置的反向功能
    【解决方案2】:

    编写一个简单的递归函数,给出列表 (5 4 3 2 1) 然后反转它,但我能做到吗?

    为什么不直接写一个递归函数给出列表 (1 2 3 4 5) ? 在“伪代码”中,以便我不为您做:

    f(x) = cons x (f(x+1))
    f(5) = (list 5)
    

    然后,拨打f(1)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-04-29
      • 2012-09-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-14
      相关资源
      最近更新 更多