OCaml:如何创建n 1的列表

Ban*_*ski 1 ocaml

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

lst = [0] * N

在我看来,OCaml没有超载*列表.

我写了以下功能

let makeList i = if i = 0 then [] else 0 :: makeList (i-1)
Run Code Online (Sandbox Code Playgroud)

我可以使用for循环执行某些操作或缩短代码吗?

Pie*_* G. 5

使用ocaml电池:

List.make n 0 
Run Code Online (Sandbox Code Playgroud)

应该做到(我还没试过)

  • 我想这是因为你没有安装电池:opam安装电池. (2认同)

ivg*_*ivg 5

OCaml标准库形成一个最小代数,适合在其上构建用户库.您应该考虑使用一些可用的社区库.其中有很多,电池,核心,Extlib,容器,仅举几例.如果有疑问,我建议使用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]
Run Code Online (Sandbox Code Playgroud)

还有一个范围列表,可以创建iota列表:

List.range 0 10;;
- : int list = [0; 1; 2; 3; 4; 5; 6; 7; 8; 9]
Run Code Online (Sandbox Code Playgroud)

安装核心

opam install core
Run Code Online (Sandbox Code Playgroud)

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

corebuild example.native
Run Code Online (Sandbox Code Playgroud)