Scheme - 返回增长列表的函数

时间:2012-09-25 10:48:49

标签: list scheme

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

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

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

2 个答案:

答案 0 :(得分:0)

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

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

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

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

答案 1 :(得分:0)

  

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

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

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

然后,拨打f(1) ...