|
||||
Меню:
Главная
Форум
Литература: Программирование и ремонт Импульсные блоки питания Неисправности и замена Радиоэлектронная аппаратура Микросхема в ТА Рубрикатор ТА Кабельные линии Обмотки и изоляция Радиоаппаратура Гибкие диски часть 2 часть 3 часть 4 часть 5 Ремонт компьютера часть 2 Аналитика: Монтаж Справочник Электроника Мощные высокочастотные транзисторы 200 микросхем Полупроводники ч.1 Часть 2 Алгоритмические проблемы 500 микросхем 500 микросхем Сортировка и поиск Монады Передача сигнала Электроника Прием сигнала Телевидиние Проектирование Эвм Оптимизация Автомобильная электроника Поляковтрансиверы Форт Тензодатчик Силовые полевые транзисторы Распределение частот Резисторные и термопарные Оберон Открытые системы шифрования Удк |
[10] (следствие) и возвращает его значение. В противном случае он вычисляет (альтернативу) и возвращает ее значение.19 В дополнение к элементарным предикатам вроде <, = и >, существуют операции логической композиции, которые позволяют нам конструировать составные предикаты. Из них чаще всего используются такие: •(and (e1) . . . (en)) Интерпретатор вычисляет выражения (e) по одному, слева направо. Если какое-нибудь из (e) дает ложное значение, значение всего выражения and - ложь, и остальные (e) не вычисляются. Если все (e) дают истинные значения, значением выражения and является значение последнего из них. •(or (e1) . . . (en)) Интерпретатор вычисляет выражения (e) по одному, слева направо. Если какое-нибудь из (e) дает истинное значение, это значение возвращается как результат выражения or, а остальные (e) не вычисляются. Если все (e) оказываются ложными, значением выражения or является ложь. •(not (e)) Значение выражения not - истина, если значение выражения (e) ложно, и ложь в противном случае. Заметим, что 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) 19Небольшая разница между if и cond состоит в том, что в cond каждое {e) может быть последовательностью выражений. Если соответствующее {p) оказывается истинным, выражения из {e) вычисляются по очереди, и в качестве значения cond возвращается значение последнего из них. Напротив, в if как {следствие), так и {альтернатива) обязаны состоять из одного выражения. (- 9 1) (/ 6 2) (+ (* 2 4) (-4 6)) (define a 3) (define b (+ a 1)) (+ a b (* a b)) (= a b) (if (and (> b a) (< b (* a b))) b a) (cond ((= a 4) 6) ((= b 4) (+ 6 7 a)) (else 25)) (+ 2 (if (> b a) b a)) (* (cond ((> a b) a) ((< a b) b) (else -1)) (+ a 1)) Упражнение 1.2. Переведите следующее выражение в префиксную форму: 5 + 4 + (2-(3-(6+))) 3(6 - 2)(2 - 7) Упражнение 1.3. Определите процедуру, которая принимает в качестве аргументов три числа и возвращает сумму квадратов двух больших из них. Упражнение 1.4. Заметим, что наша модель вычислений разрешает существование комбинаций, операторы которых - составные выражения. С помощью этого наблюдения опишите, как работает следующая процедура: (define (a-plus-abs-b a b) ((if (> b 0) + -) a b)) Упражнение 1.5. Бен Битобор придумал тест для проверки интерпретатора на то, с каким порядком вычислений он работает, аппликативным или нормальным. Бен определяет такие две процедуры: (define (p) (p)) (define (test x y) (if (= x 0) 0 y)) Затем он вычисляет выражение (test 0 (p)) Какое поведение увидит Бен, если интерпретатор использует аппликативный порядок вычислений? Какое поведение он увидит, если интерпретатор использует нормальный порядок? Объясните Ваш ответ. (Предполагается, что правило вычисления особой формы if одинаково независимо от того, какой порядок вычислений используется. Сначала вычисляется выражение-предикат, и результат определяет, нужно ли вычислять выражение-следствие или альтернативу.) 1.1.7 Пример: вычисление квадратного корня методом Ньютона Процедуры, как они описаны выше, очень похожи на обыкновенные математические функции. Они устанавливают значение, которое определяется одним или более параметром. Но есть важное различие между математическими функциями и компьютерными процедурами. Процедуры должны быть эффективными. В качестве примера рассмотрим задачу вычисления квадратного корня. Мы можем определить функцию «квадратный корень» так: \[х = такое у, что у > 0 и у2 = х Это описывает совершенно нормальную математическую функцию. С помощью такого определения мы можем решать, является ли одно число квадратным корнем другого, или выводить общие свойства квадратных корней. С другой стороны, это определение не описывает процедуры. В самом деле, оно почти ничего не говорит о том, как найти квадратный корень данного числа. Не поможет и попытка перевести это определение на псевдо-Лисп: (define (sqrt x) (the y (and (>= y 0) (= (square y) x)))) Это только уход от вопроса. Противопоставление функций и процедур отражает общее различие между описанием свойств объектов и описанием того, как что-то делать, или, как иногда говорят, различие между декларативным знанием и императивным знанием. В математике нас обычно интересуют декларативные описания (что такое), а в информатике императивные описания (как).20 20Декларативные и императивные описания тесно связаны между собой, как и математика с информатикой. Например, сказать, что ответ, получаемый программой, «верен», означает сделать об этой программе декларативное утверждение. Существует большое количество исследований, направленных на отыскание методов доказательства того, что программа корректна, и большая часть сложности этого предмета исследования связана с переходом от императивных утверждений (из |
Среды: Smalltalk80 MicroCap Local bus Bios Pci 12С ML Микроконтроллеры: Atmel Intel Holtek AVR MSP430 Microchip Книги: Емкостный датчик 500 схем для радиолюбителей часть 2 (4) Структура компьютерных программ Автоматическая коммутация Кондиционирование и вентиляция Ошибки при монтаже Схемы звуковоспроизведения Дроссели для питания Блоки питания Детекторы перемещения Теория электропривода Адаптивное управление Измерение параметров Печатная плата pcad pcb Физика цвета Управлении софтверными проектами Математический аппарат Битовые строки Микроконтроллер nios Команды управления выполнением программы Перехода от ahdl к vhdl Холодный спай Усилители hi-fi Электронные часы Сердечники из распылённого железа Анализ алгоритмов 8-разрядные КМОП Классификация МПК История Устройства автоматики Системы и сети Частотность Справочник микросхем Вторичного электропитания Типы видеомониторов Радиобиблиотека Электронные системы Бесконтекстный язык Управление техническими системами Монтаж печатных плат Работа с коммуникациями Создание библиотечного компонента Нейрокомпьютерная техника Parser Пи-регулятор ч.1 ПИ-регулятор ч.2 Обработка списков Интегральные схемы Шина ISAВ Шина PCI Прикладная криптография Нетематическое: Взрывной автогидролиз Нечеткая логика Бытовые установки (укр) Автоматизация проектирования Сбор и защита Дискретная математика Kb радиостанция Энергетика Ретро: Прием в автомобиле Управление шаговым двигателем Магнитная запись Ремонт микроволновки Дискретные системы часть 2 | ||