2016-04-12 27 views
1

OCaml'de aşağıdaki Python kodunun karşılığı nedir?OCaml: N1'ler listesi nasıl oluşturulur

lst = [0] * N

O OCaml Listeler için * aşırı değil geliyor bana.

Ben şu fonksiyonu

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

şey bir for döngü veya kod kısaltmak kullanarak yapabilir yazdım?

+4

'' eğlenceli n -> Array.make n 0 |> Array.to_list'' – objmagic

cevap

5

:

List.make n 0 

bunu yapmalıdır (bunu denemedim)

+0

ben 'Şu hatayı alıyorum Hata: Unbound değer List.make' –

+2

Sanırım bunun nedeni, pilleri takmadığınız için: opam pilleri takın. –

+0

, üst düzey ortamdaki pillerle çalışır: #requires "batteries" ;; Açık Piller; List.make 5 0 ;; 0'a eşit 5 elementin bir listesini verecektir. –

3

OCaml operatörleri aşırı yüklemiyor.

Standart kitaplıkta böyle listeler oluşturmak için hiçbir şey yoktur, bunu kendiniz uygulamanız gerekir. ocaml batteries kullanma

5

OCaml Standart kütüphane formları minimal cebir, bunun üzerine kullanıcı kitaplıkları oluşturmak için uygun. Mevcut topluluk kütüphanelerinden bazılarını kullanmayı düşünmelisiniz. Bunlardan birkaçı, Piller, Çekirdek, Extlib, Konteynerler, bunlardan birkaçı. Şüpheye düşersem Core kütüphanesini kullanmamı öneririm, en azından OCaml Book'un mevcut durumu akılda tutulur. Core kendinize uygun bir List.init işlevi vardır:

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

iota listeleri yapabilir bir dizi listesi de bulunmaktadır:

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

yükleyin çekirdek

opam install core 

ile Üst düzeydeki ile oynamak için coretop programını kullanın (çekirdekle birlikte yüklenir). kodunuzu example.ml olduğunu varsayarak, örneğin programı, kullanım corebuild, derlemek için:

corebuild example.native