Kurz erklärt
Eine reine Funktion liefert bei gleichen Argumenten immer dasselbe Ergebnis und hat keine Nebenwirkungen: Sie ändert weder globale Variablen noch Eingaben, schreibt nichts in Dateien und gibt nichts aus.
Genauer
Reine Funktionen sind leicht zu verstehen, zu testen und zu parallelisieren, weil ihr Ergebnis nur von den Argumenten abhängt. Ergebnisse lassen sich zwischenspeichern (Memoization), und der Compiler darf sie umsortieren oder wegoptimieren. Sie sind das Rückgrat der funktionalen Programmierung.