Описание создания версии 1:
http://chlorophil.blogspot.com/search/label/emp1
Описание создания версии 2:
http://chlorophil.blogspot.com/search/label/emp2
В общем, что это такое я не разбирался
Похоже на попытку изобрести Лисп
средствами Эрланга. Но зато описывается parse_transform
Mamut,
M>Описание создания версии 1: http://chlorophil.blogspot.com/search/label/emp1
M>Описание создания версии 2: http://chlorophil.blogspot.com/search/label/emp2
M>В общем, что это такое я не разбирался Похоже на попытку изобрести Лисп средствами Эрланга. Но зато описывается parse_transform
Даа, наворотить такое... Просто
.
Хотя всё это имело бы великий смысл, если бы не запятые в синтаксисе списков/туплов в Эрланге, которые будут загромождать запись в dsl-ях. С этим столкнулся Ярив несколько раньше при создании "escaped SQL". А так да, всё что нам нужно, это (по-лисповски)
ну и разумеется синтаксис для определения макроса.
(defmacro do-primes (var-and-range &rest body)
(let ((var (first var-and-range))
(start (second var-and-range))
(end (third var-and-range)))
`(do ((,var (next-prime ,start) (next-prime (1+ ,var))))
((> ,var ,end))
,@body)))
Представляешь как это на Эрланге будет выглядеть?
'defmacro###do_primes'(var_and_range, body) ->
{let, {{var, {first, var_and_range}},
{start, {second, var_and_range}},
{end, {third, var_and_range}}},
backquote({do, {{unquote(var), {next-prime, unquote(start)}, {next-prime, (unquote(var) + 1}}}}},
{unquote(var) > unquote(end)}),
splice(body)}}}.
(не знаю, соотсветствуют ли скобки)