Я не понимал разницы между Call-by-name и 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
каждый раз.
Что произойдет в случае необходимости?