Мои решения для задач из великого и ужасного SICP
Для быстрого создания файлов упражнений на основе шаблонов я использую Ansible.
Добавить упражнение:
$ make new e=1_29
Создаст файл ./solutions/1_29.rkt
на основе шаблона упражнений x_xx.rkt и файл ./tests/1_29.test.rkt
на основе шаблона теста x_xx.test.rkt.
В конец файла README.md будет добавлена строчка вида:
- [Exercise 1.29](./solutions/1_29.rkt) [(test)](./tests/1_29.test.rkt)
Смотри templating.yml и Makefile.
Чтобы запустить тест для одного упражнения:
$ make test e=3_25
Запустить последовательно все тесты:
$ make run_tests
Эта же команда используется travis.ci для проверки при каждом коммите. Некоторые упражнения я выполняю также на JavaScript, для каждой темы создавая отдельный пакет, например: Part 3.3.4: JS-implementation
На данный момент, имплементации на JavaScript не проверяются с помощью travis.
- 1.1 Элементы программирования.
- Exercise 1.01
- Exercise 1.02 (test)
- Exercise 1.03 (test)
- Exercise 1.07 (test) Нахождение квадратного корня методом Ньютона.
- Exercise 1.08 (test)
- 1.2 Процедуры и порождаемые ими процессы.
- Exercise 1.09
- Exercise 1.11 (test)
- Exercise 1.12 (test) Вычисление элемента треугольника Паскаля.
- Exercise 1.14 Дерево иллюстрирующее процесс порождаемый процедурой count-change.
- Exercise 1.16 (test) Процедура быстрого возведения в степень порождающая итеративный процесс.
- Exercise 1.17 (test)
- Exercise 1.18 (test) Умножение двух чисел с помощью сложения (метод русского крестьянина).
- Exercise 1.21 (test) Поиск наибольшего делителя (НОД) двух чисел по алгоритму Евклида.
- Exercise 1.22 (test)
- Exercise 1.23 (test) Простой тест числа на простоту на основе поиска наименьшего делителя. (Вероятностный алгоритм)
- Exercise 1.24 (test) Проверка числа на простоту по методу Ферма (Пропускает числа Кармайкла).
- Exercise 1.28 (test) Надежный тест на простоту (Миллера-Рабина)
- 1.3. Формулирование абстракций с помощью процедур высших порядков.
- Exercise 1.29 (test) Правило Симпсона - метод численного интегрирования.
- Exercise 1.30 (test) Суммирование последовательности (итеративный процесс).
- Exercise 1.31 (test)
- Exercise 1.32 (test)
- Exercise 1.33 (test) Свертка совмещенная с фильтрацией для последовательности.
- Exercise 1.34 Процедура нахождение неподвижной точки функции и вычисление значения золотого сечения на её основе.
- Exercise 1.35 (test)
- Exercise 1.36 (test)
- Exercise 1.37 (test) "Конечная" бесконечная дробь, с порождением рекурсивного и итеративного процессов.
- Exercise 1.38 (test)
- Exercise 1.39 (test)
- Exercise 1.41 (test)
- Exercise 1.42 (test) Композиция функций.
- Exercise 1.43 (test) n-кратное применение процедуры.
- Exercise 1.44 (test)
- Exercise 1.46 (test) Абстракция для стратегии пошагового улучшения.
- 2.1. Введение в абстракцию данных.
- 2.2. Иерархические данные и свойство замыкания.
- Exercise 2.17 (test) Получение последней пары из списка.
- Exercise 2.18 (test) Reverse list.
- Exercise 2.19 (test)
- Exercise 2.20 (test)
- Exercise 2.21 (test)
- Exercise 2.23 for-each
- Exercise 2.24
- Exercise 2.25 (test)
- Exercise 2.27 (test) Deep-reverse
- Exercise 2.28 (test) "Распрямление" дерева
- Exercise 2.29 (test) Бинарный мобиль и его сбалансированность
- Exercise 2.30 (test)
- Exercise 2.31 (test) Tree map
- Exercise 2.32 (test) Находим все подмножества в множестве
- Exercise 2.33 (test)
- Exercise 2.34 (test)
- Exercise 2.35 (test)
- Exercise 2.36 (test)
- Exercise 2.39 (test) reverse с помощью foldr & foldl
- Exercise 2.40 (test)
- Exercise 2.41 (test)
- Exercise 2.42 (test) Задача о восьми ферзях.
- Exercise 2.44 Язык описания изображений
- Exercise 2.45
- Exercise 2.46 (test)
- Exercise 2.47 (test)
- Exercise 2.48 (test)
- Exercise 2.49
- Exercise 2.50
- 2.3. Символьные данные.
- Exercise 2.54 (test)
- Exercise 2.56 (test) Взятие производной
- Exercise 2.57 (test) Взятие производных от сумм и произведений с любым количества термов
- Exercise 2.58 (test)
- Exercise 2.59 (test) Множества представленные в виде неупорядоченных списков
- Exercise 2.60 (test)
- Exercise 2.61 (test) Множества представленные в виде упорядоченных списков
- Exercise 2.62 (test) O(n) union-set для упорядоченного представления множеств
- Exercise 2.63 (test)
- Exercise 2.64 (test)
- Exercise 2.65 (test)
- Exercise 2.66 (test)
- Exercise 2.67 (test)
- Exercise 2.68 (test) Деревья Хоффмана
- Exercise 2.69 (test) Построение дерева Хоффмана из списка пар (символ - частота)
- Exercise 2.70
- Exercise 2.72 (test)
- 2.4. Множественные представления для абстрактных данных.
- 2.5. Системы с обобщенными операциями.
- Exercise 2.78 (test) Обобщенные арифметические операции
- Exercise 2.79 (test)
- Exercise 2.80 (test)
- Exercise 2.81 (test)
- Exercise 2.82 (test)
- Exercise 2.83 (test)
- Exercise 2.84 (test)
- Exercise 2.87 (test)
- 3.1. Присваивание и внутреннее состояние объектов.
- 3.2. Модель вычислений с окружениями.
- 3.3. Моделирование при помощи изменяемых данных.
- Exercise 3.14 (test)
- Exercise 3.16 (test)
- Exercise 3.17 (test) Подсчет пар в структуре
- Exercise 3.18 (test) Поиск цикла в списке
- Exercise 3.19 (test) Поиск цикла в списке по алгоритму "кролика и черепахи"
- Exercise 3.21 (test)
- Exercise 3.22 (test) Реализация очередей
- Exercise 3.23 (test) Реализация двусторонней очереди
- Exercise 3.24 (test)
- Exercise 3.25 (test)
- Exercise 3.28 ИЛИ - элемент
- Exercise 3.29
- Part 3.3.4: JS-implementation Имитация цифровой схемы на JavaScript
- Part 3.3.4: Racket-implementation Имитация цифровой схемы на Racket
- Exercise 3.33 (test) Avareger on constraints
- Exercise 3.35 (test) Squarer constraint
- Exercise 3.37 (test) "Ограничительные" версии арифметических операций в виде процедур
- 3.4. Парралелизм: время имеет значение.
- Exercise 3.47 Реализация семафора
- 3.5. Потоки.