24.03.2015 Views

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.

SHOW MORE
SHOW LESS

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.

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!