Упражнения
- 1.1 Последовательность выражений
- 1.2 В префиксной форме
- 1.3 Сумма квадратов
- 1.4 Составные выражения
- 1.5 Порядок вычислений
- 1.6 Особая форма
- 1.7 Квадратный корень
- 1.8 Кубический корень
- 1.9 Процедуры сложения
- 1.10 Функция Аккермана
- 1.11 Итеративные и рекурсивные процессы
- 1.12 Треугольник Паскаля
- 1.13 Числа Фибоначчи и золотое сечение
- 1.14 Размен 11 центов
- 1.15 Синус угла
- 1.16 Быстрое возведение в степень
- 1.17 Умножение с помощью сложения
- 1.18 Итеративный процесс для умножения чисел
- 1.19 Числа Фибоначчи через преобразование
- 1.20 НОД и порядки вычисления
- 1.21 Наименьший делитель
- 1.22 Наименьшие простые числа
- 1.23 Модификация smallest-divisor
- 1.24 Модификация timed-prime-test
- 1.25 Лишняя работа
- 1.26 Медленная процедура
- 1.27 Числа Кармайкла
- 1.28 Тест Миллера–Рабина
- 1.29 Правило Симпсона
- 1.30 Итерация
- 1.31 Процедуры высших порядков
- 1.32 Накопление
- 1.33 Обобщенное накопление
- 1.34 Вычислить комбинацию
- 1.35 Золотое сечение
- 1.36 Поиск неподвижной точки
- 1.37 Конечная цепная дробь
- 1.38 Формула Эйлера
- 1.39 Формула Ламберта
- 1.40 Вычисление нулей
- 1.41 Удваивание
- 1.42 Композиция
- 1.43 N-кратное применение f
- 1.44 N-кратно сглаженная функция
- 1.45 Корень n-ой степени
- 1.46 Пошаговое улучшение
- 2.1 Модификация make-rat
- 2.2 Представление отрезков на плоскости
- 2.3 Представление прямоугольников на плоскости
- 2.4 Процедурное представление пар
- 2.5 Представление пар с помощью чисел и арифметических операций
- 2.6 Числа Чёрча
- 2.7 Верхняя и нижняя границы интервала
- 2.8 Разность интервалов
- 2.9 Радиус интервала
- 2.10 Интервал, пересекающий ноль
- 2.11 Знаки конечных точек интервалов
- 2.12 Интервал по среднему значению и погрешности
- 2.13 Погрешность в процентах произведения двух интервалов
- 2.14 Различные результаты по формулам для параллельных резисторов
- 2.15 Формула без повторений переменных предстовляющих неточную величину
- 2.16 Общий случай разных результатов в эквивалентных выражениях
- 2.17 Последний элемент списка
- 2.18 Переворот списка
- 2.19 Размен монет разных валют
- 2.20 Точечная запись
- 2.21 Список квадратов
- 2.22 Square-list с итеративным процессом
- 2.23 Процедура for-each
- 2.24 Стрелочная диаграмма
- 2.25 Извлечение 7 из списков
- 2.26 Выражения с двумя списками
- 2.27 Глубокий переворот списка
- 2.28 Список листьев дерева
- 2.29 Бинарный мобиль
- 2.30 Дерево квадратов
- 2.31 Отображение дерева
- 2.32 Множество подмножеств
- 2.33 Списковые операции в виде накопления
- 2.34 Схема Горнера
- 2.35 Count-leaves в виде накопления
- 2.36 Процедура accumulate-n
- 2.37 Матричные операции
- 2.38 Свёртки
- 2.39 Реверс через свёртки
- 2.40 Уникальные пары
- 2.41 Упорядоченные тройки
- 2.42 Задача о восьми ферзях
- 2.43 Оптимизация queens
- 2.44 Процедура up-split
- 2.45 Операция разделения
- 2.46 Представление векторов
- 2.47 Реализация рамок
- 2.48 Представление отрезков с помощью векторов.
- 2.49 Определение элементарных рисовалок
- 2.50 Обращение и поворот изображений
- 2.51 Процедура below
- 2.52 Изменение рисовалки wave
- 2.53 Вычисление выражений
- 2.54 Equal? в виде процедуры
- 2.55 Выражения с кавычками
- 2.56 Простейшее дифференцирование
- 2.57 Дифференцирование нескольких термов
- 2.58 Модификация программы дифференцирования
- 2.59 Объединение множеств представленных неупорядоченными списками
- 2.60 Множество как список с повторяющимися элементами
- 2.61 Добавление элемента в множество представленное упорядоченным списком
- 2.62 Объединение множеств представленных упорядоченными списками
- 2.63 Преобразование дерева в список
- 2.64 Процедура partial-tree
- 2.65 Процедуры для множеств реализованных бинарными деревьями
- 2.66 Процедура lookup
- 2.67 Раскодирование сообщения
- 2.68 Процедура encode-symbol
- 2.69 Процедура successive-merge
- 2.70 Кодирование сообщения
- 2.71 Частоты символов
- 2.72 Порядок роста для кодирования символов
- 2.73 Программа символьного дифференцирования с диспетчеризацией
- 2.74 Структуры данных в подразделениях компании Insatiable Enterprises, Inc
- 2.75 Конструктор make-from-mag-ang в стиле передачи сообщений
- 2.76 Развитие системы с обобщенными операциями
- 2.77 Селекторы комплексных чисел
- 2.78 Использование внутренней системы типов Scheme
- 2.79 Обобщенный предикат равенства equ?
- 2.80 Обобщенный предикат =zero?
- 2.81 Привидение совпадающих типов аргументов
- 2.82 Общий случай привидения с несколькими аргументами
- 2.83 Обобщенная операция raise
- 2.84 Последовательный подъем
- 2.85 Процедура drop
- 2.86 Обобщение комплексных чисел
- 2.87 =zero? для многочленов
- 2.88 Вычитание многочленов
- 2.89 Процедуры для плотных многочленов
- 2.90 Обобщенные операции над списками термов
- 2.91 Деление многочленов с одной переменной
- 2.92 Сложение и умножение многочленов с несколькими переменными
- 2.93 Обобщенные операции в пакете арифметики рациональных чисел
- 2.94 Обобщенная операция
- 2.95 Псевдоделение
- 2.96 Множитель целости
- 2.97 Алгоритм как процедура
- 3.1 Создание накопителей
- 3.2 Количество вызовов процедуры
- 3.3 Защищенный паролем счет
- 3.4 Контроль количества попыток ввода пароля
- 3.5 Интегрирование методом Монте-Карло
- 3.6 Усовершенствованный генератор случайных чисел
- 3.7 Совместные счета
- 3.8 Порядок вычисления подвыражений
- 3.9 Окружения процедуры вычисления факториала
- 3.10 Анализ альтернативных версий
- 3.11 Внутренние определения
- 3.12 Добавление списков
- 3.13 Процедура make-cycle
- 3.14 Процедура Mystery
- 3.15 Стрелочные диаграммы
- 3.16 Процедура подсчета числа пар
- 3.17 Число разных пар в структуре
- 3.18 Определите наличие цикла в списке
- 3.19 Оптимизируйте использование памяти
- 3.20 Нарисуйте диаграммы окружений
- 3.21 Процедура print-queue
- 3.22 Очередь как процедура с внутренним состоянием
- 3.23 Дек
- 3.24 Конструктор таблиц make-table
- 3.25 Обобщение одномерных и двухмерных таблиц
- 3.26 Упорядоченные ключи в таблице организованной в виде бинарного дерева
- 3.27 Мемоизация
- 3.28 ИЛИ-элемент как элементарный функциональный блок
- 3.29 ИЛИ-элемент как составной блок
- 3.30 Каскадный сумматор
- 3.31 Процедура accept-action-procedure!
- 3.32 Хранение процедур в очереди
- 3.33 Процедура averager
- 3.34 Квадратор
- 3.35 Квадратор как элементарное ограничение
- 3.36 Диаграмма окружения
- 3.37 «Ограничительные» версии арифметических операций
- 3.38 Общий счет
- 3.39 Сохранившиеся исходы
- 3.40 Все возможные значения x
- 3.41 Сериализованный make-account
- 3.42 Изменение make-account
- 3.43 Временные диаграммы
- 3.44 Задача переноса денег с одного счета на другой
- 3.45 Переопределение объекта-счёта
- 3.46 Нарисуйте временную диаграмму
- 3.47 Реализации семафоров
- 3.48 Serialized-exchange с использованием метода избежания тупиков
- 3.49 Сценарий, в котором механизм избежания тупиков не работает
- 3.50 Обобщение stream-map
- 3.51 Значение выражений
- 3.52 Значение sum
- 3.53 Описание элементов потока
- 3.54 Процедура mul-streams
- 3.55 Процедура partial-sums
- 3.56 Задача Хэмминга о порождении чисел
- 3.57 Сложения при вычислении чисел Фибоначчи
- 3.58 Интерпретация потока
- 3.59 Степенныe ряды представленные в виде бесконечных потоков
- 3.60 Перемножение последовательностей
- 3.61 Процедура invert-unit-series
- 3.62 Процедура div-series
- 3.63 Эффективность процедуры sqrt-stream
- 3.64 Процедура stream-limit
- 3.65 Три последовательности приближений к натуральному логарифму 2
- 3.66 Порядок пар в потоке
- 3.67 Модификация процедуры pairs
- 3.68 Альтернативное определение pairs
- 3.69 Процедура triples
- 3.70 Функция взвешивания
- 3.71 Числа Рамануджана
- 3.72 Поток чисел, которые можно записать как сумму двух квадратов
- 3.73 RC-цепь
- 3.74 Переходы входного сигнала через ноль
- 3.75 Сглаживание сигнала
- 3.76 Процедура smooth
- 3.77 Модификация процедуры integral
- 3.78 Процедура solve-2nd
- 3.79 Обобщение процедуры solve-2nd
- 3.80 Последовательная RLC-цепь
- 3.81 Поток случайных чисел
- 3.82 Интегрирование методом Монте-Карло на основе потоков
- 4.1 Порядок вычисления
- 4.2 Помогите Хьюго
- 4.3 Перепишите eval
- 4.4 Особые формы интерпретатора
- 4.5 Измените обработку cond
- 4.6 Напишите синтаксическое преобразование
- 4.7 Особая форма let*
- 4.8 Именованный let
- 4.9 Итерационные конструкции
- 4.10 Разработайте новый синтаксис для Scheme
- 4.11 Перепишите операции с окружениями
- 4.12 Общая схема поведения
- 4.13 Особая форма make-unbound!
- 4.14 Почему у Хьюго не работает map?
- 4.15 Покажите, что невозможно написать процедуру halts?
- 4.16 Реализации обработки внутренних определений
- 4.17 Нарисуйте диаграммы окружения
- 4.18 Альтернативная стратегия обработки определений
- 4.19 Реализация внутренних определений
- 4.20 Особая форма letrec
- 4.21 Рекурсивные процедуры без letrec
- 4.22 Расширьте интерпретатор
- 4.23 Сравните две версии analyze-sequence
- 4.24 Проведите несколько экспериментов
- 4.25 Попытка вычисления факториала
- 4.26 Важность ленивых вычислений
- 4.27 Взаимодействие между ленивыми вычислениями и побочными эффектами
- 4.28 Вычисление оператора через actual-value
- 4.29 Продемонстрируйте преимущества мемоизации
- 4.30 Работа с последовательностями в ленивом интерпретаторе
- 4.31 Поведение ленивого интерпретатора
- 4.32 Разница между потоками и ленивыми списками
- 4.33 Измените работу интерпретатора с закавыченными выражениями
- 4.34 Измените управляющий цикл интерпретатора
- 4.35 Напишите процедуру an-integer-between
- 4.36 Порождение произвольных Пифагоровых троек
- 4.37 Эффективность порождения Пифагоровых троек
- 4.38 Измените процедуру multiple-dwelling
- 4.39 Порядок ограничений в процедуре multiple-dwelling
- 4.40 Эффективность порождения вариантов
- 4.41 Решите задачу о проживании
- 4.42 Решите задачу "Лгуньи"
- 4.43 Кто отец Лорны?
- 4.44 Недетерминистская программа для решения «задачи о восьми ферзях»
- 4.45 Пять разборов предложения
- 4.46 Порядок вычисления операндов
- 4.47 Альтернативный вариант parse-verb-phrase
- 4.48 Дополнение грамматики
- 4.49 Порождение предложений
- 4.50 Особая форма ramb
- 4.51 Присваивание permanent-set!
- 4.52 Конструкция if-fail
- 4.53 Результат вычисления
- 4.54 Процедура analyze-require
- 4.55 Простые запросы
- 4.56 Составные запросы
- 4.57 Правило замены служащих
- 4.58 Правило «независим»
- 4.59 Правило meeting-time
- 4.60 Запрос lives-near
- 4.61 Правила для отношения next-to
- 4.62 Правила для last-pair
- 4.63 Книга Бытия, 4
- 4.64 Бесконечный цикл
- 4.65 Запрос, который находит всех шишек
- 4.66 Сумма зарплат всех программистов
- 4.67 Детектор циклов запросной системы
- 4.68 Правила для операции reverse
- 4.69 Правила для добавления приставок «пра» в отношение внук
- 4.70 Цель выражений let в процедурах add-assertion! и add-rule!
- 4.71 Явные операции delay в simple-query и disjoin
- 4.72 Чередование потоков
- 4.73 Явное испольование delay во flatten-stream
- 4.74 Упрощенная версия stream-flatmap
- 4.75 Особая форма unique
- 4.76 Раздельная обработка двух подвыражений запроса and
- 4.77 «Задержанная» фильтрация
- 4.78 Язык запросов в виде недетерминистской программы
- 4.79 Метод применения правил который использует окружения
- 5.1 Регистровая машина
- 5.2 Опишите итеративную факториал-машину
- 5.3 Вычисление квадратных корней методом Ньютона
- 5.4 Опишите регистровые машины
- 5.5 Смоделируйте работу факториальной машины и машины Фибоначчи
- 5.6 Команды save и restore
- 5.7 Проверьте машины на имитаторе
- 5.8 Измените процедуру extract-labels
- 5.9 Применение операций только к регистрам и константам
- 5.10 Новый синтаксис для команд регистровой машины
- 5.11 Восстановление значения в другом регистре
- 5.12 Расширьте ассемблер
- 5.13 Определение регистров присутствующих в машине
- 5.14 Количество сохранений и максимальная глубина стека, требуемые для вычисления n!
- 5.15 Подсчет команд
- 5.16 Трассировка команд
- 5.17 Печать меток
- 5.18 Трассировка регистров
- 5.19 Контрольные точки
- 5.20 Стрелочная диаграмма и представление в виде вектора
- 5.21 Регистровые машины для count-leaves
- 5.22 Регистровые машины для процедур append
- 5.23 Обработка производных выражений
- 5.24 Сond как новая особая форма
- 5.25 Вычислитель с нормальным порядков вычислений, на основе ленивого интерпретатора
- 5.26 Исследование хвостовой рекурсии в вычислителе
- 5.27 Максимальная глубина стека и общее число сохранений, требуемых для вычисления n!
- 5.28 Вычислитель без хвостовой рекурсии
- 5.29 Cтек в вычислении чисел Фибоначчи с помощью древовидной рекурсии
- 5.30 Система обработки ошибок
- 5.31 Лишние операции
- 5.32 Комбинации, в которых оператором является символ
- 5.33 Сравнение кодов для вычисления факториала
- 5.34 Существенное различие между кодом для итеративной и рекурсивной версий factorial
- 5.35 Пример вывода компилятора
- 5.36 Порядок вычисления в компиляторе
- 5.37 Механизм preserving
- 5.38 Явное кодирование отдельных примитивов
- 5.39 Процедуры lexical-address-lookup и lexical-address-set!
- 5.40 Поддержка окружения времени компиляции
- 5.41 Процедура find-variable
- 5.42 Compile-variable и compile-assignment с командами лексической адресации
- 5.43 Компилятор и просмотр внутренних определений
- 5.44 Изменение компилятора с явным кодированием
- 5.45 Качество компилятора
- 5.46 Эффективность компиляции для процедуры Фибоначчи с древовидной рекурсией
- 5.47 Модифицируем вычислитель
- 5.48 Примитив compile-and-run
- 5.49 Регистровая машина
- 5.50 Метациклический интерпретатор
- 5.51 Рудиментарная реализация Scheme на C
- 5.52 Scheme компилятор в последовательности команд C