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
Prossima revisione
Revisione precedente
Ultima revisione Entrambe le parti successive la revisione
magistraleinformaticanetworking:spm:ocamlfs1 [23/03/2011 alle 16:14 (13 anni fa)]
Marco Danelutto
magistraleinformaticanetworking:spm:ocamlfs1 [23/03/2011 alle 16:25 (13 anni fa)]
Marco Danelutto
Linea 49: Linea 49:
 # let array1 = [1;2];; # let array1 = [1;2];;
 val array1 : int list = [1; 2] val array1 : int list = [1; 2]
-# let array2 = [3,4];; 
-val array2 : (int * int) list = [(3, 4)] 
-# let stream = [array1;array2];; 
-Error: This expression has type (int * int) list 
-       but an expression was expected of type int list 
 # let array2 = [3;4];; # let array2 = [3;4];;
 val array2 : int list = [3; 4] val array2 : int list = [3; 4]
Linea 60: Linea 55:
 # farm (List.map sq) stream;; # farm (List.map sq) stream;;
 - : int list list = [[1; 4]; [9; 16]] - : int list list = [[1; 4]; [9; 16]]
 +
 +</code>
 +
 +This is a little bit ambiguous due to the usage of lists to represent both streams and arrays. 
 +Ocaml provides arrays as primitive types actually. Arrays are denoted similarly to lists using particular brackets:
 +<code>
 +# [|1;2|];;
 +- : int array = [|1; 2|]
 +
 +</code>
 +As for lists, a map working on arrays is pre-defined: 
 +<code>
 +# Array.map;;
 +- : ('a -> 'b) -> 'a array -> 'b array = <fun>
 +
 +</code>
 +Therefore we can re-write the //farm of map// example as follows:
 +<code>
 +
 +# let rec farm f x = 
 +  match (x) with 
 +  [] -> []
 +| listHead::listTail -> (f listHead)::(farm f listTail);;
 +      val farm : ('a -> 'b) -> 'a list -> 'b list = <fun>
 +# let sq x = x * x;; 
 +val sq : int -> int = <fun>
 +# let worker = Array.map sq;;
 +val worker : int array -> int array = <fun>
 +# let main = farm worker;;
 +val main : int array list -> int array list = <fun>
 +# let array1 = [| 1 ; 2 |];;
 +val array1 : int array = [|1; 2|]
 +# let array2 = [| 3; 4 |];;
 +val array2 : int array = [|3; 4|]
 +# let stream = [ array1; array2 ];;
 +val stream : int array list = [[|1; 2|]; [|3; 4|]]
 +# main stream;;
 +- : int array list = [[|1; 4|]; [|9; 16|]]
  
 </code> </code>
  
magistraleinformaticanetworking/spm/ocamlfs1.txt · Ultima modifica: 23/03/2011 alle 16:31 (13 anni fa) da Marco Danelutto