我正在尝试使用scheme来编写一个函数f
,它接受一个n
和一个函数g
,并返回一个长度为n
的列表列表,但根据g
指出的模式,根据布尔人的说法。例如,函数f
应该使用n表示3和函数g
,它使列表中的每个第3项都为真。它应该返回:
(list (list true true false)
(list true true false)
(list true true false))
我不知道从哪里开始,所以任何帮助或提示将不胜感激。谢谢!
答案 0 :(得分:1)
这样做的关键似乎是使用map
。
简而言之,map
接受一个函数和一个列表,并将该函数应用于该列表,返回修改后的列表。
要做到这一点,因为我假设您不想直接解决方案,我首先构建您的列表列表(只需使用累加器 - 倒计时 - 只要需要,就可以生成列表,并将cons
和list
以及quote
用于其他所有内容。
然后只需将地图(可能两次,具体取决于您如何实施解决方案)应用于列表列表。 (例如列出l
和函数fn
:(map fn (car l))
并重复cdr
l
和cons
结果一起返回)。
答案 1 :(得分:1)
我并不完全遵循您要执行的操作,但除了map
之外,您可能会发现build-list
非常有用。 build-list
接受一个数字和一个过程,取0到该数字的范围减去1,并将过程映射到该范围。 e.g。
> (build-list 5 (lambda (x) (* x x)))
(0 1 4 9 16)