Strumenti Utente

Strumenti Sito


magistraleinformaticanetworking:spm:ocamlfs1

Differenze

Queste sono le differenze tra la revisione selezionata e la versione attuale della pagina.

Link a questa pagina di confronto

Entrambe le parti precedenti la revisione Revisione precedente
magistraleinformaticanetworking:spm:ocamlfs1 [23/03/2011 alle 16:25 (11 anni fa)]
Marco Danelutto
magistraleinformaticanetworking:spm:ocamlfs1 [23/03/2011 alle 16:31 (11 anni fa)] (versione attuale)
Marco Danelutto
Linea 93: Linea 93:
 # main stream;; # main stream;;
 - : int array list = [[|1; 4|]; [|9; 16|]] - : int array list = [[|1; 4|]; [|9; 16|]]
 +
 +</code>
 +
 +Even better, we can define our data type **stream** using the Ocaml type definition syntax: 
 +<code>
 +# type 'a stream = Empty | Stream of ('a * 'a stream);;
 +type 'a stream = Empty | Stream of ('a * 'a stream)
 +
 +</code>
 +The farm functional semantics may therefore be defined by the function: 
 +<code>
 +
 +  let rec farm f = function
 +    Empty -> Empty
 +  | Stream(x,y) -> Stream ((f x), (farm f y));;
 +val farm : ('a -> 'b) -> 'a stream -> 'b stream = <fun>
 +
 +</code>
 +Therefore the type of our //farm of map// will be correctly inferred as: 
 +<code>
 +# farm (Array.map sq);;
 +- : int array stream -> int array stream = <fun>
  
 </code> </code>
  
magistraleinformaticanetworking/spm/ocamlfs1.1300897520.txt.gz · Ultima modifica: 23/03/2011 alle 16:25 (11 anni fa) da Marco Danelutto