Например, ссылочно прозрачная функция без свободных переменных:
g op x y = x `op` y
Теперь теперь функция со свободными (из точки зрения f
) переменными op
и x
:
x = 1
op = (+)
f y = x `op` y
f
также является ссылочно прозрачным. Но это чистая функция?
Если это не чистая функция, то каково имя для функции, которая является ссылочно прозрачной, но использует 1 или более переменных, связанных в охватывающей области?
Мотивация для этого вопроса:
Мне это не ясно из Wikipedia article:
Значение результата не должно зависеть от всех (или любых) значений аргумента. Однако он должен зависеть только от значений аргументов.
(акцент мой)
и Google ищет, может ли чистая функция зависеть от свободного (в смысле привязки в охватывающей области, а не будучи связанными в объеме функции).
Кроме того, в этой книге говорится:
Если функции без свободных переменных чисты, закрытие нечисто?
Интересна функция
function (y) { return x }
. Он содержит свободная переменная, x. Свободная переменная - это та, которая не связана внутри функция. До сих пор мы видели только один способ "привязать" переменную, а именно путем передачи аргумента с тем же именем. Поскольку Функцияfunction (y) { return x }
не имеет аргумента с именем x, переменная x не связана в этой функции, что делает ее "свободной".Теперь, когда мы знаем, что переменные, используемые в функции, либо связаны, либо мы можем разбить функции на функции со свободными переменными и те, у кого:
- Функции, не содержащие свободных переменных, называются чистыми функциями.
- Функции, содержащие одну или несколько свободных переменных, называются замыканиями.
Итак, каково определение "чистой функции"?