LINUX.ORG.RU

Сортировка списка во время компиляции

 , , ,


0

2

Начал писать на досуге небольшую библиотеку шаблонных контейнеров. Вот ее часть, включая сортировку списка.
Эта замечательная программа определяет два списка, затем сливает их в один и сортирует. Во время компиляции. Ни одной переменной во время исполнения не пострадало.
А способен ли на такое Lisp, Haskell, Agda, Coq, Epigram или Mercury?

Ответ на: комментарий от Waterlaz

Можно проверить, что раскрывается таки в компайл тайме

$ ghc  -ddump-splices tst.hs
tst.hs:7:13-42: Splicing expression
    liftM sortE $ liftM2 (++|) a b ======> [7, 3, 2, 2, 2, 1]
Waterlaz ★★★★★
()
Ответ на: комментарий от Waterlaz

Тогда

less (LitE (IntegerL a)) (LitE (IntegerL b)) = compare a b
sortE (ListE ys) = ListE $ sortBy less ys

И quotы можно прямо в main делать, это splicовые функции надо выносить в отдельный модуль.

quasimoto ★★★★
()
Последнее исправление: quasimoto (всего исправлений: 1)
Ответ на: комментарий от Waterlaz

Что-то мне подсказывает что это не мержсорт. Тут число сравнений может квадратично зависить от длины списка[?]

nerdogeek
() автор топика
Ответ на: комментарий от Aswed

Жир от твоего коментария мне всю квартиру затопил.

Сарказм вообще-то - довольно обезжиренный продукт, но тут уж зависит как его принимать:).

unlog1c ★★★
()

Более наглядной демонстрации нормальных ЯП над эзотерическими шаблонами крестов трудно вообразить.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.