我试图从给定的数组中创建一个列表,在我的代码中它返回一个空列表。 我想知道为什么列表不可能做到这一点。是因为我们应该在第三行返回一些东西并且连接没有“保存”在任何地方吗?
let arrayTOlist a =
let l = [] in
for i = 0 to (Array.length a - 1) do
[a.(i)]::l (*why does this have type unit?*)
done;
l;;
l
是不可变的。所以没有什么可以改变
[]
的初始值。因此该函数将始终返回
[]
。表达式
[a.(i)] :: l
不会改变
l
。每次迭代都有一个长度为 1 的列表值。然后该值被丢弃(这会导致警告该值应具有单位类型)。已经有一个函数
Array.to_list
,所以我认为这是一个家庭作业问题,因此使用 Array 模块中的其他函数重新实现
Array.to_list
是没有意义的。最好的方法可能是使用以数组索引作为参数的递归函数。
let arrayTOlist a = let l =[] in [a.(0)] :: l;;
val arrayTOlist : 'a array -> 'a list list = <fun>
所以我强烈认为这是 for 循环,因为它生成了警告。
我们可以通过阅读 OCaml 文档中有关 for 循环的