在方案中生成列表列表的函数

发布于 2024-08-14 18:38:45 字数 365 浏览 5 评论 0原文

我正在尝试使用方案编写一个函数f,它接受一个数字n和一个函数g并返回一个长度列表的列表n,但根据 g 指示的模式与布尔值一致。例如,函数 f 应采用 n(例如 3),而函数 g 则使列表中的每个第 3 项都为 true。它应该返回:

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

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

I'm trying to use scheme to write a function f that takes a number n and a function g and returns a list of lists of length n, but according with booleans according to the pattern indicated by g. For example, the function f should take n say 3 and the function g which makes every 3rd item on the list a true. It should return this:

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

I have no idea where to start with this, so any help or tips would be greatly appreciated. THanks!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

关键是使用map

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

为此,我假设您不需要直接的解决方案,我首先构建您的列表列表(只需使用累加器 - 倒计时 - 使列表根据需要长,然后使用 < code>cons 和 listquote 对于其他所有内容,

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

祝你好运!

Key to this looks like using map.

In short, map takes a function and a list, and applies the function to that list, returning the modified list.

To do this, as I'm assuming you don't want a direct solution, I'd first construct your list of lists (just use an accumulator -- count down -- to make the list as long as needed, and use cons and list and quote for everything else.

Then simply apply map (probably twice, depending on how you implement your solution) to the list of lists. (eg list l and function fn: (map fn (car l)) and recur with the cdr of l and cons the results back together).

Good luck! Hope this helps!

葮薆情 2024-08-21 18:38:45

我不太明白你想要做什么,但除了 map 之外,你可能会发现 build-list 很有用。 build-list 采用一个数字和一个过程,采用从 0 到该数字减 1 的范围,并将您的过程映射到该范围。例如

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

I don't quite follow what you're trying to do, but in addition to map, you might find build-list to be useful. build-list takes a number and a procedure, takes the range from 0 to that number less 1, and maps your procedure over that range. e.g.

> (build-list 5 (lambda (x) (* x x)))
(0 1 4 9 16)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文