Справочник стандартной библиотеки
По каждому глаголу: падежная рамка (роли аргументов — порядок свободен), что делает, сложность и пример. Пока раскрыт раздел «Потоки»; остальная стандартная библиотека добавляется сюда (см. руководство). Ленивое — считается по запросу, по одному элементу.
Колонка «сложность» — для продвинутых: нотация «O(…)» показывает, сколько
работы приходится на шаг (O(1) — дёшево, один элемент за раз; O(N) — по разу на
каждый из N). Новичку читать её не обязательно.
Потоки — ленивые последовательности раздел руководства
Поток — ленивая, потенциально бесконечная последовательность (аналог Java Stream). Печатать поток
целиком нельзя — сперва возьми конечное терминалом. Условие/действие — именованный глагол в творительном
или инлайн через неявный оно (пример №114).
Генераторы — создают поток
| Глагол (рамка) | Что делает | Сложность | Пример |
|---|---|---|---|
натуральные | поток 1, 2, 3, … | O(1)/элемент | первые 5 натуральных |
натуральные от N от = источник | поток N, N+1, N+2, … | O(1)/элемент | первые 3 (натуральные от 10) |
повторяй ДЕЙСТВИЕМ от НАЧАЛА твор. + от | iterate: начало, f(начала), f(f(начала))… | O(1)/элемент | повторяй удвоением от 1 |
Ленивые шаги — поток → поток (несовершенный вид)
| Глагол (рамка) | Что делает | Сложность | Пример |
|---|---|---|---|
отображай ПОТОК ДЕЙСТВИЕМ объект + твор. | map — применяет действие к каждому (лениво) | O(1)/элемент | отображай натуральные квадратом |
отфильтровывай ПОТОК УСЛОВИЕМ объект + твор. | filter — оставляет подходящие (лениво) | O(1)/подходящий* | отфильтровывай натуральные, оно меньше 5 |
* фильтр может пропускать сколько угодно не-подходящих в поиске следующего подходящего; над бесконечным потоком без совпадений — не завершится (на площадке остановит лимит шагов).
Терминалы — берут конечное (короткое замыкание)
| Глагол (рамка) | Что делает | Сложность | Пример |
|---|---|---|---|
первые N ПОТОК | take — первые N элементов → список | O(N) | первые 10 натуральных |
пока ПОТОК УСЛОВИЕМ объект + твор. | takeWhile — пока условие истинно → список | O(длина префикса) | пока натуральные, оно меньше 10 |
любой / все / никакой ПОТОК УСЛОВИЕМ и «из ПОТОКА» | кванторы да/нет, стоп на первом решающем | O(до решающего) | любой из натуральных, оно больше 100 |
Заглянуть внутрь и склеить
| Глагол (рамка) | Что делает | Сложность | Пример |
|---|---|---|---|
голова ПОТОК | первый элемент (посчитанный) | O(1) | голова натуральных → 1 |
хвост ПОТОК | остаток — снова ПОТОК | O(1) | первые 3 (хвост натуральных) |
спари ПОТОК с ПОТОКОМ объект + с | zip — поток пар, стоп на коротком | O(1)/элемент | спари поток с натуральными (нумерация) |
Свёртка потока (сумма/сверни) — сперва материализуй терминалом
(сумма (пока натуральные, оно меньше 10)): свёртка обязана пройти все элементы, а поток бесконечен.
Первое подходящее = голова (отфильтровывай …). Печать целого потока — ошибка с подсказкой.
Шаги конвейера чисты (эффектов в них не бывает) — печатай над готовым результатом.
Математические структуры раздел руководства
Новые числовые типы (комплексные, конечные поля, кватернионы) — обычные алгебраические структуры,
а не «рунги» ядра. Автор объявляет структуру блоком <класс> <имя>: <поля> и её
операции; операторы + − × ÷ над её значениями выводятся. Класс диктует, что обязательно и
что законно:
| Класс | Автор даёт | Операторы | Пример |
|---|---|---|---|
кольцо | сложение, умножение, противоположное (ноль/единица — опц.) |
+ − × (÷ → ошибка «в кольце нет деления») | матрицы 2×2 №125 |
поле | + ещё обратное | + − × ÷ |
комплексные №121, GF(5) №122 |
тело | как поле, но × некоммутативно | + − × ÷ (правое деление) |
кватернионы №123 |
Конструктор — имя a и b, поле читается как глагол (вещ z), смешение с обычным числом —
через операцию вложение (число «вкладывается» в структуру: 3 + 4 * i). Показ и равенство —
свои или по умолчанию (покомпонентно).
| Форма | Что делает | Пример |
|---|---|---|
подключи библиотека «Имя» | подключает библиотеку со структурами — и её типы доступны | библиотека структур №124 |
Матрицы и массивы
Матрица — экземпляр класса кольцо над вложенным списком. Данные строят
скобочным литералом [[0, -1], [1, 0]] (симметрично показу, синоним словесному
всё:); отрицательные — унарным минусом -1; доступ к элементу чейнится
сквозь «может быть» (сетка[i][j]). Как аргумент глагола литерал берут в скобки: матрица ([[…]]).
| Форма | Что делает | Пример |
|---|---|---|
[[a, b], [c, d]] | скобочный литерал массива (вложенность любой глубины); -x — унарный минус |
массивы №126 |
рисунок <список> | 2D-«красивый» показ: высокие скобки ⎡⎣, колонки выровнены | матрицы 2×2 №125 |
| библиотека матриц n×m | + − × (× некоммутативно), транспонирование, определитель, элемент |
матрицы n×m №127 |
Агентский вид: матричный литерал [[…]] (≥2 строк) рисуется 2D-блоком
⎡⎣ прямо в исходнике; канон в файле — ASCII [[…]], при запуске сворачивается обратно.
Честно: это структуры с операторами, НЕ символьная алгебра (CAS). Законы (ассоциативность и т.п.) объявляем классом, не проверяем. Отложено: пользовательские классы, группы/алгебры над полем, тензоры (n-мерные), обратная матрица, общий определитель N×N.
Тестирование — встроено в язык пример №17
Тесты — часть языка (не библиотека): инлайн проверь: … должно …, именованные с таблицей
случаев проверка «имя»: … , где:, покрытие глаголов, договоры требует/гарантирует.
| Форма | Что проверяет |
|---|---|
проверь: X должно равняться Y | равенство |
… должно быть больше/меньше Y / > < | сравнение (числа и строки) |
… должно быть чётным/пустым/… | предикат (§18) |
… должно вызвать ошибку | ожидание паники |
проверка «имя»: … , где: таблица | data-driven (по вердикту на строку) |
Тестовые двойники (дублёры) пример №128
Для эффектного кода (зависит от репозитория/службы) — двойники по духу Spock, родной формой (Mockito/Spock — библиотеки; у нас — в языке). Интерпретатор-only.
| Форма | Что делает | Spock |
|---|---|---|
заглушка [«Тип»] как <имя> | создать двойник | Mock() |
пусть <двойник> «метод» <арг…> → <знач> | стаб ответа (любое=любой арг; иначе ничего) | >> |
проверь: <двойник> получил «метод» <арг…> | verify ≥1 | 1 * m() |
… получил «метод» … ровно N раз | verify счёта | N * m() |
<двойник> НЕ получил «метод» любое | verify «никогда» | 0 * m() |
шпион <объект> как <имя> | двойник вокруг реального: незастабленный зов → в настоящий (и пишется) | Spy() |
Двойник получает зов и стрелкой → отвечает. Два вида: заглушка (=Mock, поддельный) и шпион (=Spy, вокруг настоящего). Стаб пусть перебивает реальный зов и у шпиона.
Проверка свойств (property-based) пример №129
Свойство = ЗАКОН для любого входа; движок генерирует ~100 случайных примеров, ищет контрпример и сжимает его до минимального. Три бэкенда, фиксированный сид (воспроизводимо). Аналог QuickCheck.
| Форма | Что делает |
|---|---|
свойство «имя»: для любого <ген> <var> …, <предикат> | прогнать закон над генерацией |
для любого целого а / любого целого от A до B а | генератор целых (по умолч. / диапазон) |
для любого логического а | генератор да/нет |
любой дроби а / любого плавающего п | рациональные / вещественные |
любой строки с / строки до N | короткие строки (малый алфавит) |
любого списка целых сп / списка <эл> длины до N | списки образцов элемента |
… и любого <ген> <var> | несколько переменных |
генератор <имя>: <выражение> | пользовательский генератор (по имени в связке) |
выбор из [a, b, c] | перечисление (сжатие к первому) |
пара из (X) и (Y) | 2-кортеж (дуалис) |
<конструктор> из (X) | fmap — конструктор к образцам |
свойство «имя» (N прогонов) (сид S): | опции: число прогонов и сид ГПСЧ |
при условии <предикат>, | отбросить негодные входы (сжатие уважает) |
отметь «метка», когда <предикат>, | классификация — доля входов с меткой |
Квантор любого — тот же корень, что матчер любое. Провал → отчёт печатает
минимальный контрпример и сид. Честно: ПОИСК контрпримеров, а не доказательство.
Параллелизм (данный) пример №130
Наречие параллельно перед ФВП над коллекцией. Безопасно из-за чистоты; на JVM — по ядрам,
прочие — последовательно (тот же результат). Общая память/замки — только внешнее на JVM.
| Форма | Что делает |
|---|---|
параллельно отобрази <функция> <список> | параллельный map (порядок сохранён) |
параллельно отфильтруй <предикат> <список> | параллельный filter (порядок сохранён) |
параллельно: <имя — это выражение>, … | структурный блок: независимые задачи разом, ждёт всех (пустая строка после) |
поручи <выражение> | пустить задачу → обещание (результат позже) |
дождись <обещание> | забрать результат (ошибка задачи всплывает тут) |
Задачи ЧИСТЫ (без ввода-вывода); ошибка — первой по порядку. Далее: каналы, акторы + реактивные события.