Книги
чёрным по белому
Главное меню
Главная О нас Добавить материал Поиск по сайту Карта книг Карта сайта
Книги
Археология Архитектура Бизнес Биология Ветеринария Военная промышленность География Геология Гороскоп Дизайн Журналы Инженерия Информационные ресурсы Искусство История Компьютерная литература Криптология Кулинария Культура Лингвистика Математика Медицина Менеджмент Металлургия Минералогия Музыка Научная литература Нумизматика Образование Охота Педагогика Политика Промышленные производства Психология Путеводители Религия Рыбалка Садоводство Саморазвитие Семиотика Социология Спорт Столярное дело Строительство Техника Туризм Фантастика Физика Футурология Химия Художественная литература Экология Экономика Электроника Энергетика Этика Юриспруденция
Новые книги
Янин В.Л. "Новгородские акты XII-XV Хронологический комментарий" (История)

Майринк Г. "Белый доминиканец " (Художественная литература)

Хусаинов А. "Голоса вещей. Альманах том 2" (Художественная литература)

Петров Г.И. "Отлучение Льва Толстого " (Художественная литература)

Хусаинов А. "Голоса вещей. Альманах том 1 " (Художественная литература)
Реклама

Структура и интерпритация компьютерных программ - Абельсон Х.

Абельсон Х. Структура и интерпритация компьютерных программ — М.: Добросвет, 2006. — 608 c.
ISBN 978-5-98227-708-4
Скачать (прямая ссылка): strukturaiinterpretacii2006.pdf
Предыдущая << 1 .. 10 11 12 13 14 15 < 16 > 17 18 19 20 21 22 .. 269 >> Следующая


что на русском языке можно было бы выразить следующим образом: «если x меньше нуля, вернуть —х; иначе вернуть x». Else — специальный символ, который в заключительной ветви cond можно использовать на месте (p). Это заставляет cond вернуть в качестве значения значение соответствующего (е) в случае, если все предыдущие ветви были пропущены. На самом деле, здесь на месте (p) можно было бы использовать любое выражение, которое всегда имеет значение истина.

Вот еще один способ написать процедуру вычисления модуля:

(define (abs x)

(if (< x 0)

(- x) x) )

Здесь употребляется особая форма if, ограниченный вид условного выражения. Его можно использовать при разборе случаев, когда есть ровно два возможных исхода. Общая форма выражения if такова:

(if (предикат) (следствие) (альтернатива))

Чтобы вычислить выражение if, интерпретатор сначала вычисляет его (предикат). Если (предикат) дает истинное значение, интерпретатор вычисляет (следствие) и возвращает его значение. В противном случае он вычисляет (альтернативу) и возвращает ее

19

значение19.

В дополнение к элементарным предикатам вроде <, = и >, существуют операции логической композиции, которые позволяют нам конструировать составные предикаты. Из них чаще всего используются такие:

• (and (B1) . . . (en))

Интерпретатор вычисляет выражения (e) по одному, слева направо. Если какое-нибудь из (e) дает ложное значение, значение всего выражения and — ложь, и остальные (e) не вычисляются. Если все (e) дают истинные значения, значением выражения and является значение последнего из них.

• (or (B1) . . . (en))

Интерпретатор вычисляет выражения (e) по одному, слева направо. Если какое-нибудь из (e) дает истинное значение, это значение возвращается как результат выражения or, а остальные (e) не вычисляются. Если все (e) оказываются ложными, значением выражения or является ложь.

• (not (e))

Значение выражения not — истина, если значение выражения (e) ложно, и ложь в противном случае.

19Небольшая разница между if и cond состоит в том, что в cond каждое (е) может быть последовательностью выражений. Если соответствующее (р) оказывается истинным, выражения из (е) вычисляются по очереди, и в качестве значения cond возвращается значение последнего из них. Напротив, в if как (следствие), так и (альтернатива) обязаны состоять из одного выражения.

38

Глава 1. Построение абстракций с помощью процедур

Заметим, что and и or — особые формы, а не процедуры, поскольку не обязательно вычисляются все подвыражения. Not — обычная процедура.

Как пример на использование этих конструкций, условие что число х находится в диапазоне 5 < х < 10, можно выразить как

(and (> x 5) (< x 10))

Другой пример: мы можем определить предикат, который проверяет, что одно число больше или равно другому, как

(define (>= x y)

(or (> x y) (= x y)))

или как

(define (>= x y) (not (< x y)))

Упражнение 1.1.

Ниже приведена последовательность выражений. Какой результат напечатает интерпретатор в ответ на каждое из них? Предполагается, что выражения вводятся в том же порядке, в каком они написаны.

10

(+5 3 4) (- 9 1)

(/ 6 2)

(+ (* 2 4) (- 4 6)) (define a 3)

(define b (+ a 1)) (+ab (* a b))

(= a b)

(if (and (> b a) (< b (* a b))) b a)

(cond ((= a 4) 6)

((= b 4) (+67a))

(else 25))

(+ 2 (if (> b a) b a))

1.1. Элементы программирования

39

(* (cond ((> a b) a) ((< a b) b) (else -1)) (+ a 1))

Упражнение 1.2.

Переведите следующее выражение в префиксную форму:

4

5 + 4 + (2-(3-(6 + -))) 3(6 -2)(2- 7)

Упражнение 1.3.

Определите процедуру, которая принимает в качестве аргументов три числа и возвращает сумму квадратов двух больших из них.

Упражнение 1.4.

Заметим, что наша модель вычислений разрешает существование комбинаций, операторы которых — составные выражения. С помощью этого наблюдения опишите, как работает следующая процедура:

(define (a-plus-abs-b a b)

((if (> b 0) + -) ab))

Упражнение 1.5.

Бен Битобор придумал тест для проверки интерпретатора на то, с каким порядком вычислений он работает, аппликативным или нормальным. Бен определяет такие две процедуры:

(define (p) (p))

(define (test x y)

(if (= x 0)

0

y))

Затем он вычисляет выражение (test 0 (p))

Какое поведение увидит Бен, если интерпретатор использует аппликативный порядок вычислений? Какое поведение он увидит, если интерпретатор использует нормальный порядок? Объясните Ваш ответ. (Предполагается, что правило вычисления особой формы if одинаково независимо от того, какой порядок вычислений используется. Сначала вычисляется выражение-предикат, и результат определяет, нужно ли вычислять выражение-следствие или альтернативу.)

40

Глава 1. Построение абстракций с помощью процедур

1.1.7. Пример: вычисление квадратного корня методом Ньютона

Процедуры, как они описаны выше, очень похожи на обыкновенные математические функции. Они устанавливают значение, которое определяется одним или более параметром. Но есть важное различие между математическими функциями и компьютерными процедурами. Процедуры должны быть эффективными.
Предыдущая << 1 .. 10 11 12 13 14 15 < 16 > 17 18 19 20 21 22 .. 269 >> Следующая