Сегодня мой друг Стефан, который занимался разработкой компиляторов в университете (у меня такого курса не было), сказал такую вещь: "Шаблоны в С++ по своей выразительности срисованы с Пролога". И я прозрел. Я хорошо понимал Пролог в институте, но связать с шаблонами не мог. Оказалось что они очень и очень похожи. И для того, чтобы показать это, мы сейчас напишем сортировку в compile-time. Основной языка Пролог является механизм сопоставления с шаблоном (pattern matching), поэтому сортировка Хоара (быстрая) записывается следующим образом: Что мы тут видим: результатом работы quicksort для пустого списка является пустой список. Результатом работы quicksort в другом случае является список Sorted, который получается путем приписывания (append) отсортированных чисел, меньших X, к отсортированному списку, состоящему из X и чисел, больших чем X. Давайте попробуем сделать то же самое на C++. Нам еще потребуется немного Lisp-образных списков. Итак, самое базовое это список. Но наш список в C+