如何计算包含 OCAML 列表的列表的长度

How can I calculate the length of a list containing lists in OCAML

我是ocaml的初学者,我被困在我的项目中。

我想统计一个列表包含的列表元素的个数。

然后测试列表是否包含奇数或偶数列表。

let listoflists = [[1;2] ; [3;4;5;6] ; [7;8;9]] 

输出

l1 = even
l2 = even 
l3 = odd

问题是:

 List.tl listoflists 

给出列表其余部分的长度 所以 2

-> 如何逐一计算列表的长度?

-> 或者我如何获取列表并将它们一一放入变量中?

对于odd/even功能,我已经做到了!

如果我不清楚请告诉我 并感谢您的帮助。

很遗憾,由于您的问题不清楚,因此无法真正帮助您。由于这显然是一道作业题,所以我将发表一些评论。

  1. 既然你谈到了给变量赋值,你似乎有一些编程经验。但是您应该知道 OCaml 代码倾向于使用不可变的变量和值,这意味着您必须以不同的方式看待事物。你可以有变量,但它们通常会被表示为函数参数(它们确实在不同的时间取不同的值)。

  2. 如果您完全没有使用 OCaml 的经验,那么学习教程可能是值得的。 OCaml.org网站推荐OCaml手册的前6章here。在较长的 运行 中,这可能比在此处提问更快地让您加快速度。

  3. 你问如何对列表列表中的每个列表进行计算。但是您没有说答案应该是什么样子。如果您想要单独的答案,每个子列表一个,要使用的函数是 List.map。相反,如果您想要从所有子列表中计算出一个累积答案,您需要一个折叠函数(如 List.fold_left)。

  4. 你说 List.tl 计算列表的长度,或者至少你似乎是这么说的。但当然不是这样, List.tl returns 除了列表的第一个元素。列表的长度由 List.length.

    计算

如果您更清楚地定义您的问题,尤其是所需的输出,您将在这里获得更好的帮助。

  1. 使用 List.iter f xs 将函数 f 应用于列表 xs.

    的每个元素
  2. 使用List.length计算每个列表的长度。

  3. 偶数可以被二整除,所以如果你用一个偶数除以二,余数将为零。使用 mod 运算符获取除法的余数。或者,您可以依赖这样一个事实,即在二进制表示中奇数总是以 1 结尾,因此您可以使用 land(逻辑与)来测试最低有效位。

  4. 如果需要引用列表元素的位置,使用List.iteri f xsList.iteri 函数会将 f 应用于两个参数,第一个是元素的位置(从 0 开始),第二个是元素本身。