Принимая во внимание следующее:
- списки в tcl не построены из консов
- списки в tcl на печати изображаются с помощью фигурных скобок
- при этом внешняя пара фигурных скобок при печати опускается
- слова можно считать символами
- {*} по смыслу есть ,@ (см. Википедию)
Получаем следующее:
# присвоим переменной v список из двух символов b и с
> set v {b c}
b c
; то же в лиспе
> (setq v '(b c))
(b c)
# построим двухэтажный список
> list a $v
a {b c}
; то же в лиспе
> (list 'a v)
; то же в лиспе с помощью квазицитирования
> `(a ,v)
# вклеим содержимое v в список
> list a {*}$v
a b c
; то же в лиспе с помощью квазицитирования
> `(a ,@v)
# А вот это что и зачем?
> puts "a $v"
a b c
# А так не работает:
> puts "a {*}$v"
a {*}b c
Здесь основной вопрос - зачем двойные кавычки ведут себя вот таким образом? Ведь, казалось бы, двойные кавычки по смыслу и являются аналогом квазицитирования, и поэтому должно быть так:
> "a $v"
a {b c}
> "a {*}$v"
a b c
Я с самого начала не мог привыкнуть к этому, и, честно сказать, для меня это выглядит похожим на ошибку проектирования. Вразумите еретика!