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