Кажется, что термины определены по-разному, но я всегда думал одно подразумевает другое; Я не могу придумать ни одного случая, когда выражение было бы ссылочно прозрачным, но не чистым, или наоборот.
В Википедии есть отдельные статьи по этим концепциям и говорится:
Из Ссылочная прозрачность : выражение - чистые функции, тогда выражение референциально прозрачный. Кроме того, некоторые нечистые функции могут быть включены в выражение, если их значения отброшены, а их побочные эффекты незначительно.
Из Чистые выражения :
Чистые функции требуются для создавать чистые выражения. [...] Чистый выражения часто называют быть ссылочно прозрачным.
Я нахожу эти утверждения сбивающими с толку. Если побочные эффекты от так называемой «нечистой функции» незначительны , достаточно, чтобы их не выполнять (т.е. заменить вызов такой функции ее значением ) без существенного изменения программа, она такая же, как если бы она была изначально чистой, не так ли?
Есть ли более простой способ понять различия между чистым выражением и ссылочно прозрачным, если таковые имеются? Если есть разница, будет оценен пример выражения, который ясно демонстрирует это.