StackOverflow mi ha indicato qui, quindi la domanda potrebbe essere un po 'nei termini di un laico.
Wikipedia definisce funzioni pure come
Nella programmazione al computer, una funzione può essere descritta come una funzione pura se entrambe queste affermazioni sulla funzione contengono:
- La funzione valuta sempre lo stesso valore di risultato dati gli stessi valori di argomento. Il valore del risultato della funzione non può dipendere da alcuna informazione o stato nascosto che può cambiare man mano che procede l'esecuzione del programma o tra diverse esecuzioni del programma, né può dipendere da alcun input esterno dai dispositivi I / O.
- La valutazione del risultato non provoca alcun effetto collaterale o output osservabile semanticamente, come la mutazione di oggetti mutabili o l'output a dispositivi I / O.
Tuttavia, non sembra citare alcuna fonte, quindi è difficile dire se si tratta di una definizione accettata o chi l'ha definita in questo modo.
Quando guardo cosa fanno le lingue quando includono una sintassi / annotazione per funzioni "pure", ci sono diversi approcci:
- In D l'unica limitazione è la non mutazione dello stato globale. Le funzioni "pure" possono mutare i suoi argomenti.
- In GCC ci sono due tipi di "puro":
pure
(nessun effetto collaterale, ma può leggere lo stato globale) econst
(rigorosamente puro come da definizione di Wikipedia). - In C # , è definito come "non apporta alcun cambiamento di stato visibile" (qualunque esso sia).
- Haskell segue la definizione di Wikipedia.
Quindi la mia domanda è: esiste una definizione canonica di pura funzione?
E se c'è, qual è la sua fonte?