Size: a a a

2021 April 02

EG

Emmanuel Goldstein in rust_offtopic
#define uncomma(a, b, c) a b c
источник

H

Hirrolot in rust_offtopic
ну вот
источник

H

Hirrolot in rust_offtopic
разделитель принимает
источник

ΑZ

Αλεχ Zhukovsky in rust_offtopic
У тебя разделитель пробел
источник

H

Hirrolot in rust_offtopic
uncomma пожалуй лучший варианта
источник

EG

Emmanuel Goldstein in rust_offtopic
То есть в случае хирро #define uncomma(__VA_ARGS__) thousand_lines_of_arcane_magic(__VA_ARGS__), но тем не менее
источник

H

Hirrolot in rust_offtopic
без рекурсии это кстати нельзя сделать в сишных макросах
источник

EG

Emmanuel Goldstein in rust_offtopic
Для трёх аргументов — можно
источник

EG

Emmanuel Goldstein in rust_offtopic
Кто ж тебе запретит
источник

H

Hirrolot in rust_offtopic
у меня сколько угодно
источник

H

Hirrolot in rust_offtopic
забавно кстати, что это определяется в моем языке как

#define ML99_uncomma_IMPL(...)       __VA_ARGS__
источник

H

Hirrolot in rust_offtopic
а вызывается как ML99_uncomma(ML99_QUOTE(v(1, 2, 3)))
источник

EG

Emmanuel Goldstein in rust_offtopic
Сложна
источник

H

Hirrolot in rust_offtopic
только напиздел немножко
источник

H

Hirrolot in rust_offtopic
ML99_QUOTE(v(1), v(2), v(3))
источник

H

Hirrolot in rust_offtopic
вот так сработает
источник

H

Hirrolot in rust_offtopic
работает так: ML99_QUOTE откладывает редукцию над v(1), v(2), v(3), получается ML99_uncomma_IMPL(v(1), v(2), v(3)) => v(1), v(2), v(3), а в сам интерпретатор уже встроен uncomma над термами тел метафункций
источник

H

Hirrolot in rust_offtopic
в самом интерпретатор подается comma-separated список термов, а он решает когда их разделять запятыми, а когда пробелами. запятыми разделяет если термы в аргументах, а пробелами -- если термы являются телом метафункции
источник

H

Hirrolot in rust_offtopic
в кишках это элегантно обыграно: eval принимает функцию для лево-ассоциативной свёртки, их всего две: space-separated и comma-separated свёртки
источник

H

Hirrolot in rust_offtopic
и эта свёртка делается над термами, в итоге получается что-то вроде uncomma(t1, uncomma(t2, uncomma(t3, ...)))
источник