25.06.2013 Views

Il Linguaggio Fortran 90/95

Il Linguaggio Fortran 90/95

Il Linguaggio Fortran 90/95

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

274 Unità di Programma<br />

IMPLICIT NONE<br />

...<br />

a = a*2<br />

func2 = a/c<br />

END FUNCTION func2<br />

Si noti come entrambe le funzioni modifichino il valore del parametro a: questo significa che il<br />

valore di somma è totalmente dipendente dall’ordine (indefinito) in cui vengono eseguite le due<br />

funzioni. Posto, ad esempio, a=4, b=2 e c=4, si possono presentare i due seguenti casi:<br />

• Se func1 è eseguita per prima, allora somma sarà pari a 16. Infatti:<br />

– in func1 a è inizialmente uguale a 4;<br />

– all’uscita da func1 a vale 16;<br />

– func1 è uguale a 16/2=8;<br />

– in func2 a è inizialmente pari a 16;<br />

– all’uscita da func2 a vale 32;<br />

– func2 è uguale a 32/4=8;<br />

– pertanto somma è pari a 8+8=16.<br />

• Se func2 è eseguita per prima, allora somma sarà pari a 34. Infatti:<br />

– in func2 a è inizialmente pari a 4;<br />

– all’uscita da func2 a vale 8;<br />

– func2 è uguale a 8/4=2;<br />

– in func1 a è inizialmente pari a 8;<br />

– all’uscita da func1 a vale 64;<br />

– func1 è uguale a 64/2=32;<br />

– pertanto somma è pari a 2+32=34.<br />

Al fine di risolvere questo problema alla radice, il <strong>Fortran</strong> <strong>95</strong> ha introdotto una nuova categoria<br />

di procedure, le pure procedure, caratterizzate dal fatto di essere totalmente esenti da<br />

effetti collaterali. Le pure function si definiscono aggiungendo il prefisso PURE all’istruzione<br />

di dichiarazione della funzione. Esse si caratterizzano per il fatto che tutti gli argomenti devono<br />

avere l’attributo INTENT(IN), nessuna variabile locale può avere attributo SAVE né sono<br />

permesse inizializzazioni delle variabili in istruzioni di dichiarazione. Ogni procedura chiamata<br />

da una pure function deve essere, a sua volta, una pure procedure. Inoltre, esse non possono<br />

contenere operazioni di I/O esterne né è permesso l’uso dell’istruzione STOP.<br />

Un esempio di pure function è il seguente:

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!