Здесь происходит две вещи:
Вы используете & resty
для деструктурирования списка всех аргументов; вот почему вы видите вывод ((John ...))
(обратите внимание на двойной (())
.
Далее вы вызываете resty
, когда вы пишете (resty)
, что приводит к ошибка (запомните, парни в clojure всегда значимы, и не только для группировки вещей togehter et c. как в языках с фигурными скобками).
Так что это будет делать то, что вы хотите:
repl=> (defn andexp [resty]
(println "here is resty:" resty)
(first resty))
#'repl/andexp
repl=> (andexp '(a b c))
here is resty: (a b c)
a
Если вы действительно хотите деструктурировать (как указано в комментариях), вы должны поместить свои аргументы в другую пару []
, чтобы деструктурировать переданный список. Например:
repl=> (defn andexp [[f & resty]]
(println "here is f and resty:" f resty)
(first resty))
#'repl/andexp
repl=> (andexp '(a b c))
here is f and resty: a (b c)
b
Больше информации о деструктурирующий