Нет, это не вычисление и забыть, это вычисление - что вызывает кеширование.
Например, рассмотрим этот код:
let x = 1 + 1
in x + 1
Поскольку Haskell ленив, это оценивается как ((1 + 1) + 1)
.Thunk, содержащий сумму thunk и one, внутренний thunk - один плюс один.
Давайте используем javascript, не ленивый язык, чтобы показать, как это выглядит:
function(){
var x = function(){ return 1 + 1 };
return x() + 1;
}
Цепи вместе, как это, могут вызвать переполнение стека, если многократно , поэтому seq
на помощь.
let x = 1 + 1
in x `seq` (x + 1)
Я лгу, когда говорю, что это оценивается как(2 + 1)
, но это почти верно - это просто, что вычисление 2 должно произойти до того, как произойдет остальное (но 2 все еще вычисляется лениво).
Возвращаясь кJavaScript:
function(){
var x = function(){ return 1 + 1 };
return (function(x){
return x + 1;
})( x() );
}