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.
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
1.1. Элементы программирования 41<br />
(define (test x y)<br />
(if (= x 0)<br />
0<br />
y))<br />
Затем он вычисляет выражение<br />
(test 0 (p))<br />
Какое поведение увидит Бен, если интерпретатор использует аппликативный порядок вычислений?<br />
Какое поведение он увидит, если интерпретатор использует нормальный порядок? Объясните<br />
Ваш ответ. (Предполагается, что правило вычисления особой формы if одинаково независимо<br />
от того, какой порядок вычислений используется. Сначала вычисляется выражениепредикат,<br />
и результат определяет, нужно ли вычислять выражение-следствие или альтернативу.)<br />
1.1.7. Пример: вычисление квадратного корня методом Ньютона<br />
Процедуры, как они описаны выше, очень похожи на обыкновенные математические<br />
функции. Они устанавливают значение, которое определяется одним или<br />
более параметром. Но есть важное различие между математическими функциями<br />
и компьютерными процедурами. Процедуры должны быть эффективными.<br />
В качестве примера рассмотрим задачу вычисления квадратного корня. Мы<br />
можем определить функцию «квадратный корень» так:<br />
√ x = такое y, что y ≥ 0 и y 2 = x<br />
Это описывает совершенно нормальную математическую функцию. С помощью<br />
такого определения мы можем решать, является ли одно число квадратным корнем<br />
другого, или выводить общие свойства квадратных корней. С другой стороны,<br />
это определение не описывает процедуры. В самом деле, оно почти ничего не говорит<br />
о том, как найти квадратный корень данного числа. Не поможет и попытка<br />
перевести это определение на псевдо-Лисп:<br />
(define (sqrt x)<br />
(the y (<strong>and</strong> (>= y 0)<br />
(= (sq<strong>ua</strong>re y) x))))<br />
Это только уход от вопроса.<br />
Противопоставление функций и процедур отражает общее различие между описанием<br />
свойств объектов и описанием того, как что-то делать, или, как иногда<br />
говорят, различие между декларативным знанием и императивным знанием. В