Сборник по СИКПу

В прошлой статье мы закончили третью главу СИКПа. Всего их пять, но остальные две объясняют как сделать транслятор, а это не наша область. Этой статьёй собираем статьи по СИКПу в кучку, чтобы было удобно пройти его за вечер.

I — Абстракция функций

Вводная в СИКП

В первой статье мы объяснили основы: синтаксис языка Scheme, рассказали про базу любого языка программирования и объяснили почему переменные и функции используют для абстракции.

Основы СИКПа

Знак действия или операция стоит первым потому что ским выделяет фишки абстракции. Сначала стоит знак, а дальше можно писать что угодно — знак не знает про типы и правила

Чёрные ящики и блочная структура

Дальше мы объяснили про приём программистских ниндзя — чёрные ящики. Можно написать себе функцию с абстрактным строением, чтобы она принимала разные типы данных и не ломалась, а потом вызывать её из любой части кода. В этой же статье, рассказали как завернуть такие функции в одну структуру, чтобы они не путались в основном коде.

Функции, области видимости и структуры

Там же повторили области видимости: как и зачем их разделять. Про области мы писали в статьях по пайтону

Процессы исполнения

Когда интерпретатор выполняет функцию, она порождает какой-то процесс. Мы разобрали три простых процесса — рекурсивный процесс, итеративный процесс и древовидную рекурсию. Ещё рассказали про хвостовую рекурсию и отличия между рекурсией, рекурсивной функцией и рекурсивным процессом.

Простые процессы в СИКПе

В некоторых ЯПшках функция может принимать в аргументе другую функцию, такие функции называются высшими. На такой конструкции можно сделать красивую функциональную змею вызовов. В статье разобрали лямбда-функции и нарисовали график на высших функциях.

Высшие функции в СИКПе

II — Абстракция данных

Библиотека обыкновенных дробей

Чтобы нормально разобраться с абстракцией данных, мы сделали библиотеку для дробей и добавили туда пользовательских функций.

Введение в абстрактные данные

Добавили интервалы

Чтобы закрепить составные данные добавили к библиотеке дробей библиотеку интервалов и протестили её на примере с резисторами.

Абстракция данных с интервалами

Иерархические данные

Сначала мы разобрали простые одноранговые списки. Доставали элемент по индексу и измеряли размер на скиме.

Простые списки в СИКПе

Потом мы сделали список списков и получили иерархическое дерево. Это ещё абстрактней, потому что в список чисел можно вставить список строк, а к нему ещё, и ещё, и ещё. Получается дерево — иерархическая схема данных.

Иерархические структуры данных в СИКПе

III — Объекты и потоки

Посмотрели на принцип написания кода с модульностью по объектам и потокам.

В модульности по объектам, логические блоки собирают по смыслу и кладут их в один файл. Получается в одном файле — один модуль, а вся система состоит из нескольких модулей.

Модульность в коде и файлах

В модульности с потоками код делится по принципу вычисления: код для параллельного вычисления в одном месте, код для последовательного вычисления — в другом.

Модульность и потоки в исполнении



Тут такое дело, у нас авторский кризис. Вы можете нам помочь или оставить нас умирать в попытках придумать интересную тему на разбор

Поделиться
Отправить
Запинить
 12   18 дн   sicp
Популярное