Beltalowda Kalevala

Если одним глазом смотреть "Пространство" (The Expanse), а другим - перечитывать древний эпос, возникает интересный стереоэффект. Ильмаринен получил от старухи Лоухи задание - вспахать кашащее гадюками поле.

Тут кователь Ильмаринен...
Из железа обувь сделал,
Сделал поножи из меди,
Их надел себе на ноги
И покрыл он ими икры;
Взял железную рубашку
Опоясался он сталью,
Взял железные перчатки
Взял он варежки из камня,
Сделал огненную лошадь;

По-моему, всё яснее ясного. Для зачистки местности от агрессивных ксеноморфов (вероятно, биологического оружия противника) десантник облачился в скафандр и применил огнемёт. Но это оказалось лишь начало:

Нужно выловить мне щуку,
Рыбу жирную поймать мне
В темных Туонелы потоках
И в глубоких водах Маны.
...
Вековечный тот кователь,
Птицу огненную сделал,
Из огня орла сковал он,
Сделал пальцы из железа,
Из каленой стали когти,
Крылья из огромной лодки.
Сам взошел на эти крылья,
Сел он на спину у птицы,
...
Ты лети, куда велю я:
К черным Туонелы потокам,
К водам Маналы глубоким!
Ты поймай большую щуку,
Рыбу жирную достань мне!

По-видимому, речь идёт о зачистке акватории от подводных лодок противника с применением противолодочной авиации.

Если что и вызывает недоумение, так это невысокий уровень калевальских систем активной защиты (прозевавшей, например, реактивный боеприпас от Ёукахайнена). Возможно, вместо этого ставка сделана на технологии регенерации или киберпротезирования, впечатляюще продемонстрированные операцией Лемминкяйнена в Туонеле.

Ещё один шаг

Что-то Рубиконы зачастили. Сделал метафункцию развёртки. А на её основе сразу - генерацию таблицы простых чисел (на этапе компиляции, естественно).

Даёшь сложность!

Перейдён своеобразный Рубикон. Хотя библиотека для обработки списков на этапе компиляции приросла уже целым рядом алгоритмов, до сих пор это были алгоритмы с временной сложностью O(1) или O(n). Добро пожаловать на следующий уровень: добавил алгоритм сортировки вставками - как известно, с квадратичной сложностью.

Скажите, это нормально?

В час ночи, допив вино, честно пошёл смотреть космический сериал о том как "ди эрсте фотонише звездолётен колонне марширт"... И отрефакторил метафункцию свёртки списков

Just for fun

Библиотека для обработки списков на этапе компиляции продолжает разрастаться.
Добавил метафункции fmap и zip_with c очевидной семантикой и причесал тесты.

Этюд по программированию

Ленин писал: "Электрон так же неисчерпаем, как атом". Блестящая формулировка! С языком C++ я работаю уже четверть столетия, но он до сих пор восхищает своей неисчерпаемостью, строгой - как григорианский хорал - стройностью, многогранностью и мощью. Подобно мощи атома, она покоряется лишь тому, кто подходит к ней с должным почтением. И, как энергия атома, в умелых руках способна творить чудеса.
Продолжаю вместо сна делать обработку списков на этапе компиляции. Написанное вчера удалось выразить ещё лаконичнее. Добавил метафункцию partition - она делит список на два: элементы, которые удовлетворяют предикату, и те, что ему не удовлетворяют.

UPD

Вчерашний этюд (https://github.com/vadimvinnik/compile_time_list) был довольно элементарен: добавление элемента в начало, в конец списка, конкатенация и свёртка. Сколько-нибудь серьёзная забава началась сегодня. Добавил метафункцию, которая "переливает" элементы, отщипывая их от начала правого списка и перенося в конец левого, пока они удовлетворяют некоторому предикату (повторю: всё происходит исключительно на этапе компиляции).
// TODO: сделать ещё метафункции для фильтрации по предикату (наподобие filter или partition), поэлементного преобразования (map aka transform).