A чистая функция определяется как функция, которая:
- Возвращает одно и то же значение для тех же аргументов, а
- Не вызывает побочных эффектов (мутация нелокальных переменных, операции ввода-вывода и т. Д.)
Рассмотрим функцию, которая вычисляет наибольший общий делитель двух натуральных чисел путем случайной выборки целых чисел от 1 до наименьшего из двух чисел и определения, разделяет ли выбранное целое число два заданных целых числа. Когда все целые числа были посещены, функция возвращает самое большое значение выборки. Предположим, что генератор случайных чисел используется равномерно.
Интуитивно, мне кажется, что эта функция чиста , несмотря на то, что ее вычисления недетерминированы. Он выдает одинаковое значение для тех же аргументов и не вызывает никаких побочных эффектов. Единственный возможный «побочный эффект», о котором я могу думать, - это вероятность того, что вычисления будут продолжаться вечно, учитывая достаточно большой вклад. Я правильно назвал эту функцию pure ?