我已經習慣了JaneStreet的Core
庫。它的List
模塊有一個整潔init
功能:核心的普遍使用的`List.init`?
List.init;;
- : int -> f:(int -> 'a) -> 'a list = <fun>
它允許你創建一個列表,使用自定義函數初始化元素:
List.init 5 ~f:(Fn.id);;
- : int list = [0; 1; 2; 3; 4]
List.init 5 ~f:(Int.to_string);;
- : string list = ["0"; "1"; "2"; "3"; "4"]
但是,這個功能似乎並不存在Pervasives
,這很傷心。我錯過了什麼,還是我必須自己實現?如果我確實需要寫它,我該如何實現呢?
編輯:
我寫的init
當務之急版本,但感覺不對不得不求助於OCaml中的必要功能,在這種情況下。 :(
let init n ~f =
let i = ref 0 in
let l = ref [] in
while !i < n do
l := (f !i) :: !l;
incr i;
done;
List.rev !l
;;
編輯2:
我已經開了一個pull request上OCaml中的GitHub上有此功能包括
作爲一般評論:不要指望普及的任何方便。如果你想要一個完整的標準庫,你將不得不使用核心或容器或電池(可能還有其他)。 – user3240588
是的,我已經注意到了。 – RichouHunter