30 likes | 195 Views
Esercizio. Si sciva in CAML una fuzione DIV che calcoli la divisione intera sui naturali (zero incluso). La funzione deve risultare indefinita allorchè applicata come in (DIV n 0), per ogni n≥0, con n dividendo e 0 divisore. Un volta scritta, la si esegua sulla macchina CAML per le seguenti
E N D
Esercizio Si sciva in CAML una fuzione DIV che calcoli la divisione intera sui naturali (zero incluso). La funzione deve risultare indefinita allorchè applicata come in (DIV n 0), per ogni n≥0, con n dividendo e 0 divisore. Un volta scritta, la si esegua sulla macchina CAML per le seguenti applicazioni: DIV 3 5;; DIV 18 3;; DIV 3 0;; DIV 0 0;; Una soluzione
DIV dd ds = if (dd-ds)≥0 then 1+DIV(dd-ds)ds else 0 • Caml Light version 0.74 #let rec DIV dd ds = if (dd-ds) >= 0 then 1+DIV(dd-ds)ds else 0;; • DIV : int -> int -> int = <fun> • #DIV 3 5 ;; • - : int = 0 • #DIV 18 3;; • - : int = 6 • #DIV 3 0;; • Uncaught exception: Out_of_memory • #f 0 0;; • Uncaught exception: Out_of_memory Out_of_memory: Perchè? Cosasignifica?
Memoria a struttura di grafo @ ds dd IFTE ≥ + 0 + - @ 1 0 1 grafodellafunzioneDIV + 1 + 0 @ 0 1 DIV 0 0: grafo dell’espressione dopo la 3^ riduzione di grafo