【问题标题】:functions that produce lists of lists in scheme在方案中生成列表列表的函数
【发布时间】:2010-12-25 02:16:51
【问题描述】:

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

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

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

【问题讨论】:

  • 问题未明确且不明确。假设所需的函数是 (f n g)。 g 采用什么论据?是(f n g) 的长度为n,还是(f n g) 的元素的长度为n,或者都是长度为n 的列表?

标签: function list scheme boolean


【解决方案1】:

这个关键看起来像使用map

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

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

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

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

【讨论】:

    【解决方案2】:

    我不太了解您要做什么,但除了map,您可能会发现build-list 很有用。 build-list 接受一个数字和一个过程,取从 0 到该数字减去 1 的范围,并将您的过程映射到该范围内。例如

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-05-24
      • 1970-01-01
      • 1970-01-01
      • 2016-01-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多