在scheme中生成列表列表的函数

时间:2009-12-10 02:08:34

标签: function list scheme boolean

我正在尝试使用scheme来编写一个函数f,它接受​​一个n和一个函数g,并返回一个长度为n的列表列表,但根据g指出的模式,根据布尔人的说法。例如,函数f应该使用n表示3和函数g,它使列表中的每个第3项都为真。它应该返回:

(list (list true true false)
      (list true true false)
      (list true true false))

我不知道从哪里开始,所以任何帮助或提示将不胜感激。谢谢!

2 个答案:

答案 0 :(得分:1)

这样做的关键似乎是使用map

简而言之,map接受一个函数和一个列表,并将该函数应用于该列表,返回修改后的列表。

要做到这一点,因为我假设您不想直接解决方案,我首先构建您的列表列表(只需使用累加器 - 倒计时 - 只要需要,就可以生成列表,并将conslist以及quote用于其他所有内容。

然后只需将地图(可能两次,具体取决于您如何实施解决方案)应用于列表列表。 (例如列出l和函数fn(map fn (car l))并重复cdr lcons结果一起返回)。

祝你好运!希望这有帮助!

答案 1 :(得分:1)

我并不完全遵循您要执行的操作,但除了map之外,您可能会发现build-list非常有用。 build-list接受一个数字和一个过程,取0到该数字的范围减去1,并将过程映射到该范围。 e.g。

> (build-list 5 (lambda (x) (* x x)))
(0 1 4 9 16)