如何计算包含 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功能,我已经做到了!
如果我不清楚请告诉我
并感谢您的帮助。
很遗憾,由于您的问题不清楚,因此无法真正帮助您。由于这显然是一道作业题,所以我将发表一些评论。
既然你谈到了给变量赋值,你似乎有一些编程经验。但是您应该知道 OCaml 代码倾向于使用不可变的变量和值,这意味着您必须以不同的方式看待事物。你可以有变量,但它们通常会被表示为函数参数(它们确实在不同的时间取不同的值)。
如果您完全没有使用 OCaml 的经验,那么学习教程可能是值得的。 OCaml.org网站推荐OCaml手册的前6章here。在较长的 运行 中,这可能比在此处提问更快地让您加快速度。
你问如何对列表列表中的每个列表进行计算。但是您没有说答案应该是什么样子。如果您想要单独的答案,每个子列表一个,要使用的函数是 List.map
。相反,如果您想要从所有子列表中计算出一个累积答案,您需要一个折叠函数(如 List.fold_left
)。
你说 List.tl
计算列表的长度,或者至少你似乎是这么说的。但当然不是这样, List.tl
returns 除了列表的第一个元素。列表的长度由 List.length
.
计算
如果您更清楚地定义您的问题,尤其是所需的输出,您将在这里获得更好的帮助。
使用 List.iter f xs
将函数 f
应用于列表 xs
.
的每个元素
使用List.length
计算每个列表的长度。
偶数可以被二整除,所以如果你用一个偶数除以二,余数将为零。使用 mod
运算符获取除法的余数。或者,您可以依赖这样一个事实,即在二进制表示中奇数总是以 1
结尾,因此您可以使用 land
(逻辑与)来测试最低有效位。
如果需要引用列表元素的位置,使用List.iteri f xs
。 List.iteri
函数会将 f
应用于两个参数,第一个是元素的位置(从 0
开始),第二个是元素本身。
我是ocaml的初学者,我被困在我的项目中。
我想统计一个列表包含的列表元素的个数。
然后测试列表是否包含奇数或偶数列表。
let listoflists = [[1;2] ; [3;4;5;6] ; [7;8;9]]
输出
l1 = even
l2 = even
l3 = odd
问题是:
List.tl listoflists
给出列表其余部分的长度
所以 2
-> 如何逐一计算列表的长度?
-> 或者我如何获取列表并将它们一一放入变量中?
对于odd/even功能,我已经做到了!
如果我不清楚请告诉我 并感谢您的帮助。
很遗憾,由于您的问题不清楚,因此无法真正帮助您。由于这显然是一道作业题,所以我将发表一些评论。
既然你谈到了给变量赋值,你似乎有一些编程经验。但是您应该知道 OCaml 代码倾向于使用不可变的变量和值,这意味着您必须以不同的方式看待事物。你可以有变量,但它们通常会被表示为函数参数(它们确实在不同的时间取不同的值)。
如果您完全没有使用 OCaml 的经验,那么学习教程可能是值得的。 OCaml.org网站推荐OCaml手册的前6章here。在较长的 运行 中,这可能比在此处提问更快地让您加快速度。
你问如何对列表列表中的每个列表进行计算。但是您没有说答案应该是什么样子。如果您想要单独的答案,每个子列表一个,要使用的函数是
List.map
。相反,如果您想要从所有子列表中计算出一个累积答案,您需要一个折叠函数(如List.fold_left
)。你说
计算List.tl
计算列表的长度,或者至少你似乎是这么说的。但当然不是这样,List.tl
returns 除了列表的第一个元素。列表的长度由List.length
.
如果您更清楚地定义您的问题,尤其是所需的输出,您将在这里获得更好的帮助。
使用
的每个元素List.iter f xs
将函数f
应用于列表xs
.使用
List.length
计算每个列表的长度。偶数可以被二整除,所以如果你用一个偶数除以二,余数将为零。使用
mod
运算符获取除法的余数。或者,您可以依赖这样一个事实,即在二进制表示中奇数总是以1
结尾,因此您可以使用land
(逻辑与)来测试最低有效位。如果需要引用列表元素的位置,使用
List.iteri f xs
。List.iteri
函数会将f
应用于两个参数,第一个是元素的位置(从0
开始),第二个是元素本身。