Harold Abelson and Gerald Jay Sussman with ... - ftp.linux.kiev.ua.
Harold Abelson and Gerald Jay Sussman with ... - ftp.linux.kiev.ua.
Harold Abelson and Gerald Jay Sussman with ... - ftp.linux.kiev.ua.
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
1.1. Элементы программирования 35<br />
упрощенных, неполных моделей. Подстановочная модель в этом смысле не исключение.<br />
В частности, когда в главе 3 мы обратимся к использованию процедур с<br />
«изменяемыми данными», то мы увидим, что подстановочная модель этого не выдерживает<br />
и ее нужно заменить более сложной моделью применения процедур 15 .<br />
Аппликативный и нормальный порядки вычисления<br />
В соответствии с описанием из раздела 1.1.3, интерпретатор сначала вычисляет<br />
оператор и операнды, а затем применяет получившуюся процедуру к получившимся<br />
аргументам. Но это не единственный способ осуществлять вычисления.<br />
Другая модель вычисления не вычисляет аргументы, пока не понадобится их значение.<br />
Вместо этого она подставляет на место параметров выражения-операнды,<br />
пока не получит выражение, в котором присутствуют только элементарные операторы,<br />
и лишь затем вычисляет его. Если бы мы использовали этот метод, вычисление<br />
(f 5)<br />
прошло бы последовательность подстановок<br />
(sum-of-sq<strong>ua</strong>res (+ 5 1) (* 5 2))<br />
(+ (sq<strong>ua</strong>re (+ 5 1)) (sq<strong>ua</strong>re (* 5 2)) )<br />
(+ (* (+ 5 1) (+ 5 1)) (* (* 5 2) (* 5 2)))<br />
за которыми последуют редукции<br />
(+ (* 6 6) (* 10 10))<br />
(+ 36 100)<br />
136<br />
Это дает тот же результат, что и предыдущая модель вычислений, но процесс его<br />
получения отличается. В частности, вычисление (+ 5 1) и (* 5 2) выполняется<br />
здесь по два раза, в соответствии с редукцией выражения<br />
15 Несмотря на простоту подстановочной модели, дать строгое математическое определение<br />
процессу подстановки оказывается удивительно сложно. Проблема возникает из-за возможности<br />
смешения имен, которые используются как формальные параметры процедуры, с именами<br />
(возможно, с ними совпадающими), которые используются в выражениях, к которым процедура<br />
может применяться. Имеется долгая история неверных определений подстановки (substitution)<br />
в литературе по логике и языкам программирования. Подробное обсуждение подстановки можно<br />
найти в Stoy 1977.