方案 - 返回不断增长的列表的函数



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

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

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

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

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

(或使用命名let循环。

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

为什么不直接编写一个递归函数来给出列表 (1 2 3 4 5) ??在"伪代码"中,所以我不会为你做:

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

然后,打电话给f(1)...

最新更新