Согласно Википедии:
В компьютерном программировании функция может быть описана как чистая, если оба эти утверждения о функции выполняются: функция всегда оценивает одно и то же значение результата, учитывая одно и то же значение (я) аргумента. Значение результата функции не может зависеть от какой-либо скрытой информации или состояния, которые могут изменяться по мере выполнения программы или между различными выполнениями программы, а также не может зависеть от какого-либо внешнего ввода от устройств ввода-вывода. Оценка результата не вызывает какого-либо семантически наблюдаемого побочного эффекта или вывода, такого как мутация изменяемых объектов или вывод на устройства ввода-вывода.
Мне интересно, можно ли написать функцию, которая вычисляет, является ли функция чистой или нет. Пример кода в Javascript:
function sum(a,b) {
return a+b;
}
function say(x){
console.log(x);
}
isPure(sum) // True
isPure(say) // False
if (rand(1000000)<2) return WRONG_ANSWER
, многократное исследование функции на предмет согласованного поведения не поможет. Но если у вас есть доступ к определению функции, доказательство тривиально.
say
вызовы . console.log
say