Matteogoli

AppuntiSML

May 4th, 2017
39
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. (*File di riepilogo delle cose viste su sml*)
  2.  
  3. (*Eseguire un file sml*)
  4.     (*use ("Riepilogo.sml");*)
  5. (*Associare un valore ad un nome*)
  6.     val a = 10;
  7.     val b:char = #"a"; (*Specificando il tipo*)
  8. (*Associare una funzione ad un nome*)  
  9.     val nome_funzione = fn n => n*2+1;
  10.     nome_funzione (2);
  11.    
  12.     fun funzione n = n div 2;
  13.     funzione (7);
  14.    
  15. (*Definire una funzione per casi*) 
  16.     fun pari_o_dispari n = case n mod 2 of 0 => "pari" | 1 => "dispari" ;
  17.     pari_o_dispari 2;
  18.     pari_o_dispari 3;
  19.    
  20. (*il case di default si effettua mediante il carattere wildcard _*)
  21. (*Usando una sintassi ridotta"*)
  22.     val pattern_match = fn 1 => "a" |
  23.         2 => "b" |
  24.         3 => "c" |
  25.         _ => "z";
  26.     pattern_match(1);
  27.     pattern_match(2);
  28.     pattern_match(3);
  29.     pattern_match(4);
  30.  
  31. (*Definizione di una funzione ricorsiva*)
  32.     val rec sum_first = fn n => if n = 0 then 0 else n + sum_first(n-1);
  33.     sum_first 9;
  34. (*Con fun non รจ necessario*)
  35.     fun fact n = if n <= 0 then 1 else n * fact (n-1);
  36.     fact 5;
  37.    
  38. (*SCOPE*)
  39.  
  40.     val y = 10;
  41.     (fn x => x +y) 5; (*Utilizza il riferimento della y dichiarato nella riga precedente*)
  42.    
  43.     (*Costrutto let-in-end lavora su espressioni*)
  44.     val fact = fn n =>
  45.         let
  46.             val rec fact_tail  = fn ( n , r) => if n = 0  (*Non visibile all'esterno*)
  47.                 then r
  48.                 else fact_tail(n-1,n*r)
  49.         in
  50.             fact_tail (n,1)
  51.         end;
  52.    
  53.     (*Costrutto local-in-end lavora su dichiarazioni*)
  54.     local
  55.         fun succ n = n+1;  (*Non visibile all'esterno*)
  56.     in
  57.         fun succ_succ n = succ (succ n)
  58.     end;
  59.     succ_succ(10);
  60.    
  61. (*Funzioni di ordine superiore*)
  62.  
  63.     (*Funzione derivata che accetta come parametro una funzione da reali a reali e ne calcola la "derivata" in un punto passato come parametro *)
  64.     val delta = 0.000001;
  65.     fun derivata ( f , x) = (f(x + delta) - f(x))/(delta); 
  66.     derivata ( fn x => 2.0*x*x , 1.0);
  67.    
  68.     val f_derivata = fn f => ( fn x =>(f(x + delta) - f(x))/(delta) );
  69.    
  70.     f_derivata (fn n => n*n);
  71.     (*Funzione che ritorna una funzione*)
  72.     fun somma x = fn n => x+n;
  73.     somma 1; (*Questa chiamata riturna una funzione fn:int -> int che somma 1 al parametro*)
  74.  
  75.     (*Curryng*)
  76.         fun mul (x,y) = x*y; (*funzione da N*N a N *)
  77.         mul(1,5);
  78.        
  79.         val mul_curr = fn x => fn y => x*y;(*funzione da N a (fn: N -> N) *)
  80.         mul_curr 1 5;
  81.        
  82.         (*Come precedente usano sintassi semplificata*)
  83.         fun mul_curr_semp x y = x*y;
  84.        
  85. (*Tipi di dato*)
  86.  
  87.     val tupola = ("a", 1, 1.5);
  88.    
  89.     (*Dare un nuovo nome a un tipo di dato esistente*)
  90.    
  91.     type indirizzo = string * int;
  92.     val residenza : indirizzo = ("Piazza Dante" , 5);
  93.    
  94.     val conta_lettere_via  = fn (via   , n  ):indirizzo => (size via);
  95.     conta_lettere_via residenza;
Add Comment
Please, Sign In to add comment