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 不会重载运算符。
标准库中没有创建此类列表的内容,您必须自己实现。
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)
OCaml 中以下 Python 代码的等价物是什么?
lst = [0] * N
在我看来,OCaml 没有为列表重载 *
。
我写了下面的函数
let makeList i = if i = 0 then [] else 0 :: makeList (i-1)
我可以使用 for
循环做一些事情或缩短代码吗?
OCaml 不会重载运算符。
标准库中没有创建此类列表的内容,您必须自己实现。
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)