Compile[]

Un approfondimento sulle funzioni compilate e su Module[]; nella funzione g[], f è richiamata internamente subito dopo essere stata compilata

g[x_]:=Module[{y,z},f=Compile[{y},z=y+2;z+1];f[x]]

g[1]

In questa versione compilata di fib1 del notebook su Fibonacci, è fondamentale che la variabile nella lista di Compile non abbia lo stesso nome della variabile di fib (qui nn e non n)

fib[n_]:=
	Module[{uno,due,temp,i},
	uno=1;due=1;
	fi=Compile[{nn},For[i=1,i<nn,i++,
	    temp=uno;
	    uno=temp+due;
            due=temp];
        uno];fi[n]] /; IntegerQ[n]

fib[5]

(* quella originale è ... *)

fib1[n_]:=
	Module[{uno,due,temp,i},
	uno=1;due=1;
	For[i=1,i<n,i++,
	    temp=uno;
	    uno=temp+due;
            due=temp];
        uno] /; IntegerQ[n]

(* Infine, un po' di prove su Module, che restituisce l'ultimo valore se non seguito da ";" oppure il valore del risultato di Return[] *)

f1[x_]:=uno=1;due=2;x

{f1[10],uno,due}

f2[x_]:=Module[{},undici=11;dodici=12;x]

{f2[10],undici,dodici}

(* ";" serve a separare le espressioni, ma anche a 
       sopprimere l'output *)

f3[x_]:=Module[{},undici=11;dodici=12;x;]

{f3[10],undici,dodici}

... allora Return

f3[x_]:=Module[{},Return[undici=11];dodici=12;x;]

f3[10]

f4[x_]:=Module[{},cento=100;Return[cento*10];dodici=12;x;]

f4[10]