Это действительно легко.Нестрогая (например, ленивая) оценка означает, что задачи могут быть отложены.Но для того, чтобы что-то отложить, вам лучше быть уверенным, что вы получите позже тот же результат, что и сейчас, и это прозрачность ссылок.Рассмотрим следующий императивный код Java:
long start = System.currentTimeMillis(); //get the start time
runBenchmarkFunction();
System.out.println("Run took " + (System.currentTimeMillis() - start) + " ms");
Теперь ленивый язык откладывает оценку первой строки, потому что запуск необходим только в третьей строке.Таким образом, результат будет 0 (или очень близко к нему).Вероятно, это не то, что вы хотите.Причиной этой проблемы может быть то, что System.currentTimeMillis не ссылочно-прозрачный.В этом случае у вас не возникло бы никаких проблем, если бы это была функция в «математическом смысле», такая как sin или ln, которые являются ссылочно прозрачными.