Skip to content

unclediga/SICP

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

40 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

SICP


Харольд Абельсон, Джеральд Джей Сассман. "Структура и интерпретация компьютерных программ".

Harold Abelson, Gerald Jay Sussman. "Structure and Interpretation of Computer Programs"


Structure and Interpretation of Computer Programs (SICP) by Abelson & Sussman // archived

The complete text in HTML

см. Ресурсы


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

1.1. Элементы программирования
1.1.1. Выражения
1.1.2. Имена и окружение
1.1.3. Вычисление комбинаций
1.1.4. Составные процедуры
1.1.5. Подстановочная модель применения процедуры
1.1.6. Условные выражения и предикаты
  • Упражнение 1.1.
  • Упражнение 1.2.
  • Упражнение 1.3.
  • Упражнение 1.4.
  • Упражнение 1.5.
1.1.7. Пример: вычисление квадратного корня методом Ньютона
1.1.8. Процедуры как абстракции типа "черный ящик"
1.2. Процедуры и порождаемые ими процессы
1.2.1. Линейные рекурсия и итерация
  • Упражнение 1.9.
  • Упражнение 1.10.
1.2.2. Древовидная рекурсия
  • Упражнение 1.11.
  • Упражнение 1.12.
  • Упражнение 1.13.
1.2.3. Порядки роста
  • Упражнение 1.14.
  • Упражнение 1.15.
1.2.4. Возведение в степень
  • Упражнение 1.16.
  • Упражнение 1.17.
  • Упражнение 1.18.
  • Упражнение 1.19.
1.2.5. Нахождение наибольшего общего делителя
  • Упражнение 1.20.
1.2.6. Пример: проверка на простоту
  • Упражнение 1.21.
  • Упражнение 1.22.
  • Упражнение 1.23.
  • Упражнение 1.24.
  • Упражнение 1.25.
  • Упражнение 1.26.
  • Упражнение 1.27.
  • Упражнение 1.28.
1.3. Формулирование абстракций с помощью процедур
1.3.1. Процедуры в качестве аргументов
1.3.2. Построение процедур с помощью lambda
1.3.3. Процедуры как обобщенные методы
1.3.4. Процедуры как возвращаемые значения
  • Упражнение 1.40.
  • Упражнение 1.41.
  • Упражнение 1.42.
  • Упражнение 1.43.
  • Упражнение 1.44.
  • Упражнение 1.45.
  • Упражнение 1.46.

2. Построение абстракций с помощью данных

2.1. Введение в абстракцию данных
2.1.1. Пример: арифметические операции над рациональными чис-
2.1.2. Барьеры абстракции
2.1.3. Что значит слово "данные"?
2.1.4. Расширенный пример: интервальная арифметика
  • Упражнение 2.7.
  • Упражнение 2.8.
  • Упражнение 2.9.
  • Упражнение 2.10.
  • Упражнение 2.11.
  • Упражнение 2.12.
  • Упражнение 2.13.
  • Упражнение 2.14.
  • Упражнение 2.15.
  • Упражнение 2.16.
2.2. Иерархические данные и свойство замыкания
2.2.1. Представление последовательностей
2.2.2. Иерархические структуры
2.2.3. Последовательности как стандартные интерфейсы

### 2.2.4. Пример: язык описания изображений

2.3. Символьные данные
2.3.1. Кавычки
2.3.2. Пример: символьное дифференцирование
2.3.3. Пример: представление множеств
  • Упражнение 2.59.
  • Упражнение 2.60.
  • Упражнение 2.61.
  • Упражнение 2.62.
  • Упражнение 2.63.
  • Упражнение 2.64.
  • Упражнение 2.65.
  • Упражнение 2.66.
2.3.4. Пример: деревья кодирования по Хаффману
  • Упражнение 2.67.
  • Упражнение 2.68.
  • Упражнение 2.69.
  • Упражнение 2.70.
  • Упражнение 2.71.
  • Упражнение 2.72.
2.4. Множественные представления для абстрактных данных
2.4.1. Представления комплексных чисел
2.4.2. Помеченные данные
2.4.3. Программирование, управляемое данными, и аддитивность
  • Упражнение 2.73.
  • Упражнение 2.74.
  • Упражнение 2.75.
  • Упражнение 2.76.
2.5. Системы с обобщенными операциями
2.5.1. Обобщенные арифметические операции
  • Упражнение 2.77.
  • Упражнение 2.78.
  • Упражнение 2.79.
  • Упражнение 2.80.
2.5.2. Сочетание данных различных типов
  • Упражнение 2.81.
  • Упражнение 2.82.
  • Упражнение 2.83.
  • Упражнение 2.84.
  • Упражнение 2.85.
  • Упражнение 2.86.
2.5.3. Пример: символьная алгебра
  • Упражнение 2.87.
  • Упражнение 2.88.
  • Упражнение 2.89.
  • Упражнение 2.90.
  • Упражнение 2.91.
  • Упражнение 2.92.
  • Упражнение 2.93.
  • Упражнение 2.94.
  • Упражнение 2.95.
  • Упражнение 2.96.
  • Упражнение 2.97.

3. Модульность, объекты и состояние

3.1. Присваивание и внутреннее состояние объектов
3.1.1. Внутренние переменные состояния
  • Упражнение 3.1.
  • Упражнение 3.2.
  • Упражнение 3.3.
  • Упражнение 3.4.
3.1.2. Преимущества присваивания
  • Упражнение 3.5.
  • Упражнение 3.6.
3.1.3. Издержки, связанные с введением присваивания
  • Упражнение 3.7.
  • Упражнение 3.8.
3.2. Модель вычислений с окружениями
3.2.1. Правила вычисления
3.2.2. Применение простых процедур
  • Упражнение 3.9.
3.2.3. Кадры как хранилище внутреннего состояния
  • Упражнение 3.10.
3.2.4. Внутренние определения
  • Упражнение 3.11.
3.3. Моделирование при помощи изменяемых данных
3.3.1. Изменяемая списковая структура
  • Упражнение 3.12.
  • Упражнение 3.13.
  • Упражнение 3.14.
  • Упражнение 3.15.
  • Упражнение 3.16.
  • Упражнение 3.17.
  • Упражнение 3.18.
  • Упражнение 3.19.
  • Упражнение 3.20.
3.3.2. Представление очередей
  • Упражнение 3.21.
  • Упражнение 3.22.
  • Упражнение 3.23.
3.3.3. Представление таблиц
  • Упражнение 3.24.
  • Упражнение 3.25.
  • Упражнение 3.26.
  • Упражнение 3.27.
3.3.4. Имитация цифровых схем
  • Упражнение 3.28.
  • Упражнение 3.29.
  • Упражнение 3.30.
  • Упражнение 3.31.
  • Упражнение 3.32.
3.3.5. Распространение ограничений
  • Упражнение 3.33.
  • Упражнение 3.34.
  • Упражнение 3.35.
  • Упражнение 3.36.
  • Упражнение 3.37.
3.4. Параллелизм: время имеет значение
3.4.1. Природа времени в параллельных системах
  • Упражнение 3.38.
3.4.2. Механизмы управления параллелизмом
  • Упражнение 3.39.
  • Упражнение 3.40.
  • Упражнение 3.41.
  • Упражнение 3.42.
  • Упражнение 3.43.
  • Упражнение 3.44.
  • Упражнение 3.45.
  • Упражнение 3.46.
  • Упражнение 3.47.
  • Упражнение 3.48.
  • Упражнение 3.49.
3.5. Потоки
3.5.1. Потоки как задержанные списки
  • Упражнение 3.50.
  • Упражнение 3.51.
  • Упражнение 3.52.
3.5.2. Бесконечные потоки
  • Упражнение 3.53.
  • Упражнение 3.54.
  • Упражнение 3.55.
  • Упражнение 3.56.
  • Упражнение 3.57.
  • Упражнение 3.58.
  • Упражнение 3.59.
  • Упражнение 3.60.
  • Упражнение 3.61.
  • Упражнение 3.62.
3.5.3. Использование парадигмы потоков
  • Упражнение 3.63.
  • Упражнение 3.64.
  • Упражнение 3.65.
  • Упражнение 3.66.
  • Упражнение 3.67.
  • Упражнение 3.68.
  • Упражнение 3.69.
  • Упражнение 3.70.
  • Упражнение 3.71.
  • Упражнение 3.72.
  • Упражнение 3.73.
  • Упражнение 3.74.
  • Упражнение 3.75.
  • Упражнение 3.76.
3.5.4. Потоки и задержанное вычисление
  • Упражнение 3.77.
  • Упражнение 3.78.
  • Упражнение 3.79.
  • Упражнение 3.80.
3.5.5. Модульность функциональных программ
  • Упражнение 3.81.
  • Упражнение 3.82.

4. Метаязыковая абстракция

4.1. Метациклический интерпретатор
4.1.1. Ядро интерпретатора
  • Упражнение 4.1.
4.1.2. Представление выражений
  • Упражнение 4.2.
  • Упражнение 4.3.
  • Упражнение 4.4.
  • Упражнение 4.5.
  • Упражнение 4.6.
  • Упражнение 4.7.
  • Упражнение 4.8.
  • Упражнение 4.9.
  • Упражнение 4.10.
4.1.3. Структуры данных интерпретатора
  • Упражнение 4.11.
  • Упражнение 4.12.
  • Упражнение 4.13.
4.1.4. Выполнение интерпретатора как программы
  • Упражнение 4.14.
4.1.5. Данные как программы
  • Упражнение 4.15.
4.1.6. Внутренние определения
  • Упражнение 4.16.
  • Упражнение 4.17.
  • Упражнение 4.18.
  • Упражнение 4.19.
  • Упражнение 4.20.
  • Упражнение 4.21.
4.1.7. Отделение синтаксического анализа от выполнения
  • Упражнение 4.22.
  • Упражнение 4.23.
  • Упражнение 4.24.
4.2. Scheme с вариациями: ленивый интерпретатор
4.2.1. Нормальный порядок вычислений и аппликативный порядок
  • Упражнение 4.25.
  • Упражнение 4.26.
4.2.2. Интерпретатор с ленивым вычислением
  • Упражнение 4.27.
  • Упражнение 4.28.
  • Упражнение 4.29.
  • Упражнение 4.30.
  • Упражнение 4.31.
4.2.3. Потоки как ленивые списки
  • Упражнение 4.32.
  • Упражнение 4.33.
  • Упражнение 4.34.
4.3. Scheme с вариациями - недетерминистское вычисление
4.3.1. Amb и search
  • Упражнение 4.35.
  • Упражнение 4.36.
  • Упражнение 4.37.
4.3.2. Примеры недетерминистских программ
  • Упражнение 4.38.
  • Упражнение 4.39.
  • Упражнение 4.40.
  • Упражнение 4.41.
  • Упражнение 4.42.
  • Упражнение 4.43.
  • Упражнение 4.44.
  • Упражнение 4.45.
  • Упражнение 4.46.
  • Упражнение 4.47.
  • Упражнение 4.48.
  • Упражнение 4.49.
4.3.3. Реализация amb-интерпретатора
  • Упражнение 4.50.
  • Упражнение 4.51.
  • Упражнение 4.52.
  • Упражнение 4.53.
  • Упражнение 4.54.
4.4. Логическое программирование
4.4.1. Дедуктивный поиск информации
  • Упражнение 4.55.
  • Упражнение 4.56.
  • Упражнение 4.57.
  • Упражнение 4.58.
  • Упражнение 4.59.
  • Упражнение 4.60.
  • Упражнение 4.61.
  • Упражнение 4.62.
  • Упражнение 4.63.
4.4.2. Как действует система обработки запросов
4.4.3. Является ли логическое программирование математической
  • Упражнение 4.64.
  • Упражнение 4.65.
  • Упражнение 4.66.
  • Упражнение 4.67.
  • Упражнение 4.68.
  • Упражнение 4.69.
4.4.4. Реализация запросной системы
4.4.4.1. Управляющий цикл и конкретизация
4.4.4.2. Вычислитель
4.4.4.3. Поиск утверждений с помощью сопоставления с образцом
4.4.4.4. Правила и унификация
4.4.4.5. Ведение базы данных
  • Упражнение 4.70.
4.4.4.6. Операции над потоками
4.4.4.7. Процедуры, определяющие синтаксис запросов
4.4.4.8. Кадры и связывания
  • Упражнение 4.71.
  • Упражнение 4.72.
  • Упражнение 4.73.
  • Упражнение 4.74.
  • Упражнение 4.75.
  • Упражнение 4.76.
  • Упражнение 4.77.
  • Упражнение 4.78.
  • Упражнение 4.79.

5. Вычисления на регистровых машинах

5.1. Проектирование регистровых машин
  • Упражнение 5.1.
5.1.1. Язык для описания регистровых машин
  • Упражнение 5.2.
5.1.2. Абстракция в проектировании машин
  • Упражнение 5.3.
5.1.3. Подпрограммы
5.1.4. Реализация рекурсии с помощью стека
  • Упражнение 5.4.
  • Упражнение 5.5.
  • Упражнение 5.6.
5.1.5. Обзор системы команд
5.2. Программа моделирования регистровых машин
  • Упражнение 5.7.

######5.2.1. Модель машины

######5.2.2. Ассемблер

  • Упражнение 5.8.
5.2.3. Порождение исполнительных процедур для команд
  • Упражнение 5.9.
  • Упражнение 5.10.
  • Упражнение 5.11.
  • Упражнение 5.12.
  • Упражнение 5.13.
5.2.4. Отслеживание производительности машины
  • Упражнение 5.14.
  • Упражнение 5.15.
  • Упражнение 5.16.
  • Упражнение 5.17.
  • Упражнение 5.18.
  • Упражнение 5.19.
5.3. Выделение памяти и сборка мусора
5.3.1. Память как векторы
  • Упражнение 5.20.
  • Упражнение 5.21.
  • Упражнение 5.22.

######5.3.2. Иллюзия бесконечной памяти

5.4. Вычислитель с явным управлением
5.4.1. Ядро вычислителя с явным управлением
5.4.2. Вычисление последовательностей и хвостовая рекурсия
5.4.3. Условные выражения, присваивания и определения
  • Упражнение 5.23.
  • Упражнение 5.24.
  • Упражнение 5.25.
5.4.4. Запуск вычислителя
  • Упражнение 5.26.
  • Упражнение 5.27.
  • Упражнение 5.28.
  • Упражнение 5.29.
  • Упражнение 5.30.
5.5. Компиляция
5.5.1. Структура компилятора
  • Упражнение 5.31.
  • Упражнение 5.32.
5.5.2. Компиляция выражений
5.5.3. Компиляция комбинаций
5.5.4. Сочетание последовательностей команд
5.5.5. Пример скомпилированного кода
  • Упражнение 5.33.
  • Упражнение 5.34.
  • Упражнение 5.35.
  • Упражнение 5.36.
  • Упражнение 5.37.
  • Упражнение 5.38.
5.5.6. Лексическая адресация
  • Упражнение 5.39.
  • Упражнение 5.40.
  • Упражнение 5.41.
  • Упражнение 5.42.
  • Упражнение 5.43.
  • Упражнение 5.44.
5.5.7. Связь скомпилированного кода с вычислителем
  • Упражнение 5.45.
  • Упражнение 5.46.
  • Упражнение 5.47.
  • Упражнение 5.48.
  • Упражнение 5.49.
  • Упражнение 5.50.
  • Упражнение 5.51.
  • Упражнение 5.52.

About

Структура и интерпретация компьютерных программ

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors