Я не понимал разницы между вызовом по имени и вызовом по необходимости. Как я понял, метод Call-by-need восстанавливает возвращенный ответ. Но как это нам помогает и есть ли принципиальная разница между результатами?
Например,
begin integer n;
procedure foo(e, n);
integer e, n;
begin
for n := 1 step 1 until 10 do begin
prints(`;;; the value of e is ');
printnln(e)
end
end;
foo(2 * n, n)
end
Итак, при вызове по имени, как я понял, мы получим:
;;; the value of e is 2
;;; the value of e is 4
;;; the value of e is 8
и так далее. Это потому, что мы передаем 2 * n
в e
, а e
вычисляется каждый раз с новым i
.
Что произойдет при вызове по необходимости?