|
||||
Меню:
Главная
Форум
Литература: Программирование и ремонт Импульсные блоки питания Неисправности и замена Радиоэлектронная аппаратура Микросхема в ТА Рубрикатор ТА Кабельные линии Обмотки и изоляция Радиоаппаратура Гибкие диски часть 2 часть 3 часть 4 часть 5 Ремонт компьютера часть 2 Аналитика: Монтаж Справочник Электроника Мощные высокочастотные транзисторы 200 микросхем Полупроводники ч.1 Часть 2 Алгоритмические проблемы 500 микросхем 500 микросхем Сортировка и поиск Монады Передача сигнала Электроника Прием сигнала Телевидиние Проектирование Эвм Оптимизация Автомобильная электроника Поляковтрансиверы Форт Тензодатчик Силовые полевые транзисторы Распределение частот Резисторные и термопарные Оберон Открытые системы шифрования Удк |
[110] (define (quoted? exp) (tagged-list? exp quote)) (define (text-of-quotation exp) (cadr exp)) Quoted? определена посредством процедуры tagged-list?, которая распознает списки, начинающиеся с указанного символа:9 (define (tagged-list? exp tag) (if (pair? exp) (eq? (car exp) tag) false)) •Присваивания имеют форму (set! (переменная) (выражение)): (define (assignment? exp) (tagged-list? exp set!)) (define (assignment-variable exp) (cadr exp)) (define (assignment-value exp) (caddr exp)) •Определения имеют вид (define (переменная) (значение)) или (define ((переменная) (параметру) ... (параметрп)) (тело)) Вторая форма (стандартное определение процедуры) является синтаксическим сахаром для (define (переменная) (lambda ((параметру) ... (параметрп)) (тело))) Соответствующие синтаксические процедуры выглядят так: (define (definition? exp) (tagged-list? exp define)) (define (definition-variable exp) (if (symbol? (cadr exp)) (cadr exp) (caadr exp))) (define (definition-value exp) (if (symbol? (cadr exp)) (caddr exp) (make-lambda (cdadr exp) (cddr exp)))) 9В разделе 2.3.1 упоминается, что интерпретатор рассматривает закавыченное выражение как список, начинающийся с quote, даже если выражение напечатано через знак кавычки. Например, выражение а будет выглядеть для интерпретатора как (quote a). См. упражнение 2.55. •Lambda-выражения являются списками, которые начинаются с символа lambda: (define (lambda? exp) (tagged-list? exp lambda)) (define (lambda-parameters exp) (cadr exp)) (define (lambda-body exp) (cddr exp)) Мы приводим также конструктор для lambda-выражений. Он используется в вышеприведенной процедуре definition-value: (define (make-lambda parameters body) (cons lambda (cons parameters body))) •Условные выражения начинаются с if и имеют предикат, следствие и (необязательную) альтернативу. Если в выражении нет части-альтернативы, мы указываем в ее качестве false.10 (define(if? exp) (tagged-list? exp if)) (define(if-predicate exp) (cadr exp)) (define(if-consequent exp) (caddr exp)) (define(if-alternative exp) (if (not (null? (cdddr exp))) (cadddr exp) false)) Мы предоставляем также конструктор для if-выражений. Его будет использовать процедура cond->if для преобразования выражений cond в выражения if: (define (make-if predicate consequent alternative) (list if predicate consequent alternative)) •Begin упаковывает последовательность выражений в одно выражение. В синтаксические операции над выражениями begin мы включаем извлечение самой последовательности из выражения begin, а также селекторы, которые возвращают первое выражение и остаток выражений в последовательности. 11 (define (begin? exp) (tagged-list? exp begin)) (define (begin-actions exp) (cdr exp)) (define (last-exp? seq) (null? (cdr seq))) 10Значение выражения if в случае, когда предикат ложен, а альтернатива отсутствует, в Scheme не определено; здесь мы решили сделать его ложным. Мы будем поддерживать переменные true и false в выполняемых выражениях путем связывания их в глобальном окружении. См. раздел 4.1.4. "Эти селекторы для списка выражений, а также соответствующие им селекторы для списка операндов, не предназначаются для абстракции данных. Они введены в качестве мнемонических имен для основных списковых операций, чтобы легче было понимать вычислитель с явным управлением из раздела 5.4. (define (first-exp seq) (car seq)) (define (rest-exps seq) (cdr seq)) Кроме того, мы даем конструктор sequence->exp (для использования в процедуре cond->if), который преобразует последовательность в единое выражение, используя, если надо, begin: (define (sequence->exp seq) (cond ((null? seq) seq) ((last-exp? seq) (first-exp seq)) (else (make-begin seq)))) (define (make-begin seq) (cons begin seq)) • Вызов процедуры - это любое составное выражение, не попадающее ни в один из перечисленных типов. Его car - это оператор, а cdr - список операндов: (define (application? exp) (pair? exp)) (define (operator exp) (car exp)) (define (operands exp) (cdr exp)) (define (no-operands? ops) (null? ops)) (define (first-operand ops) (car ops)) (define (rest-operands ops) (cdr ops)) Производные выражения Некоторые особые формы языка можно определить через выражения, включающие другие особые формы, вместо того, чтобы задавать их напрямую. Как пример рассмотрим cond, который можно реализовать как гнездо выражений if . Например, задачу вычисления выражения (cond ((> x 0) x) ((= x 0) (display zero) 0) (else (- x))) можно свести к задаче вычисления следующего выражения, состоящего из форм if и begin: (if (> x 0) x (if (= x 0) (begin (display zero) 0) (- x))) |
Среды: 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 | ||