Se il livello superiore è già avviata, è possibile caricare in modo dinamico la libreria:
# #load "nums.cma";;
# Num.mult_num;;
- : Num.num -> Num.num -> Num.num = <fun>
Un'altra possibilità (che funziona per tutte le librerie di terze parti e gestirà i percorsi e le dipendenze per voi) è di utilizzare ocamlfind
. Per questo, problema
#use "topfind";;
(o meglio metterlo nel file ~/.ocamlinit
). Per caricare una libreria, basta fare
# #require "num";;
/usr/lib/ocaml/nums.cma: loaded
/home/user/.opam/system/lib/num-top: added to search path
/home/user/.opam/system/lib/num-top/num_top.cma: loaded
/home/user/.opam/system/lib/num: added to search path
Ecco un esempio di moltiplicazione (Se ocamlfind
- - da qui topfind
non è disponibile, installarlo utilizzando opam.):
# Num.(num_of_int 30 */ num_of_int 1234);;
- : Num.num = Num.Int 37020
Il costruzione Num.(e)
è un'abbreviazione per let open Num in e
e rende possibile utilizzare le funzioni senza Num
prefisso e
.Ecco una definizione del fattoriale:
# let rec fac n =
let open Num in
if n =/ Int 0 then Int 1 else n */ fac (n -/ Int 1);;
val fac : Num.num -> Num.num = <fun>
si può provare con
# fac Num.(Int 100);;
- : Num.num = Num.Big_int <abstr>
Se è stato utilizzato #require
, installa una bella stampante per Num
valori così l'interazione precedente assomiglia:
# fac Num.(Int 100);;
- : Num.num =
<num 93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000>
che è molto più facile da leggere!
Mi hai insegnato tonnellate di ocaml in una sola risposta! Grazie! –