Котаны, я тупой, и уменя есть вопрос к лисперам!
Вот в Ruby есть такая фича:
irb(main):001:0> v = [1, 2, 3,]
=> [1, 2, 3]
irb(main):002:0> [20, 30, 40, *v, 0]
=> [20, 30, 40, 1, 2, 3, 0]
Унарная псевдооперация * подставляет содержимое аргумента-контейнера в рантайме туда, где она находится.
Может ли в принципе такая же фича быть в лиспе? Пусть у нас есть:
(some-function a b c (unbox v) d)
, где (unbox v) обозначает то же самое, что *v в Ruby. Для такого синтаксиса мы не сможем написать макрос, который сделает этот код работоспособным.
Можно сделать вот так:
(do-unbox some-function a b c (unbox v) d)
Такая форма записи позволит определить макрос do-unbox и скрыть все кишки внутри него. Но это как-то длинно и нелаконично.