StackOverflow hat mich hier gezeigt, daher könnte die Frage für Laien etwas zutreffend sein.
Wikipedia definiert reine Funktionen als
In der Computerprogrammierung kann eine Funktion als reine Funktion beschrieben werden, wenn beide Aussagen über die Funktion gelten:
- Die Funktion wertet immer den gleichen Ergebniswert bei gleichen Argumentwerten aus. Der Funktionsergebniswert kann weder von versteckten Informationen oder Zuständen abhängen, die sich im Verlauf der Programmausführung oder zwischen verschiedenen Programmausführungen ändern können, noch von externen Eingaben von E / A-Geräten.
- Die Auswertung des Ergebnisses verursacht keine semantisch beobachtbaren Nebenwirkungen oder Ausgaben, wie z. B. die Mutation veränderlicher Objekte oder die Ausgabe an E / A-Geräte.
Es scheint jedoch keine Quellen zu zitieren - daher ist es schwer zu sagen, ob dies eine akzeptierte Definition ist oder wer sie so definiert hat.
Wenn ich mir anschaue, was die Sprachen tun, wenn sie eine Syntax / Anmerkung für "reine" Funktionen enthalten, gibt es einige verschiedene Ansätze:
- In D ist die einzige Einschränkung die Nichtmutation des globalen Zustands. "Reine" Funktionen können ihre Argumente mutieren.
- In GCC gibt es zwei Arten von "rein":
pure
(keine Nebenwirkungen, kann aber den globalen Zustand lesen) undconst
(streng rein gemäß Wikipedia-Definition). - In C # ist definiert als "nimmt keine sichtbaren Zustandsänderungen vor" (was auch immer das ist).
- Haskell folgt der Wikipedia-Definition.
Meine Frage ist also: Gibt es eine kanonische Definition der reinen Funktion?
Und wenn ja, woher stammt sie?