- 1
- 2
(format t "~{~[~:R~; ~S~:;none~] chance~^, ~}" '(0 1 0 2 0 3))
;; first chance, second chance, third chance
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+123
(format t "~{~[~:R~; ~S~:;none~] chance~^, ~}" '(0 1 0 2 0 3))
;; first chance, second chance, third chance
Любителям ДСЛ (а так же древесно-стружечных плит, и других керамических изделий):
Объясните почему так работает? Наверное не говнокод, просто нихрена не понятно.
roman-kashitsyn 19.10.2012 17:27 # +1
Означает итерацию по списку, переданному в качестве аргумента
> chance~^,
Означает разделять результаты применения формата к списку разделителем ,
> ~[~:R~; ~S~:;none~]
означает условный выбор формата: 0 будет форматированием числа в виде английского текста, 1 - в виде лиспового литерала, который можно будет прочитать функцией READ, любое другое число будет порождать none
Магия довольно подробно описана здесь: http://www.gigamonkeys.com/book/a-few-format-recipes.html
P.S. мне не нравится в CL ни "dsl" форматирования, ни dsl, построенный на макросе loop. Слишком много илитарности.
wvxvw 19.10.2012 18:13 # 0
По-идее, чтобы аргумент следующий за строкой с шаблоном воспринимался как указатель на то, какой из существующих вариантов нужно выбрать, нужно было бы делать ~#[...~;...~:;...] но так вообще не работает, и ни один из елементов никогда не используется :/