OCaml:如何创建一个包含 n 个 1 的列表

OCaml : How to create a list of n 1's in

OCaml 中以下 Python 代码的等价物是什么?

lst = [0] * N

在我看来,OCaml 没有为列表重载 *

我写了下面的函数

let makeList i = if i = 0 then [] else 0 :: makeList (i-1)

我可以使用 for 循环做一些事情或缩短代码吗?

OCaml 不会重载运算符。

标准库中没有创建此类列表的内容,您必须自己实现。

使用ocaml batteries

List.make n 0 

应该可以(我没试过)

OCaml 标准库形成了一个最小的代数,适合在其上构建用户库。您应该考虑使用一些可用的社区库。其中有很多,Batteries、Core、Extlib、Containers,仅举几例。如果有疑问,我会建议使用 Core 库,至少因为当前最先进的 OCaml Book 是用这个库编写的。在 Core 中有一个 List.init 函数,可以满足您的需要:

open Core.Std
List.init 10 ~f:(const 0);;
- : int list = [0; 0; 0; 0; 0; 0; 0; 0; 0; 0]

还有一个范围列表,可以制作iota列表:

List.range 0 10;;
- : int list = [0; 1; 2; 3; 4; 5; 6; 7; 8; 9]

安装核心

opam install core

要在顶层使用它,请使用 coretop 程序(与核心一起安装)。 要编译程序,请使用 corebuild,例如,假设您的代码位于 example.ml:

corebuild example.native

从 ocaml 4.06 开始你可以使用:

List.init N (fun x->0)