В общем, деструктура работает хорошо и будет делать то, что вы хотите. Одна проблема с чем-то вроде
(loop [[arg0 arg1] (get-my-arg-list)] ...
заключается в том, что вы должны объединить все обратно в список при вызове recur
. Из-за этого рекурсивные вызовы будут выглядеть как
(recur [new-arg0 new-arg1])
Если это прерыватель сделки, вы также можете определить анонимную функцию для использования с recur
, а затем использовать apply
, чтобы распаковать список аргументов при первом вызове, хотя в целом этот прием довольно уродлив. Пример:
(apply (fn [arg0 arg1]
...
(recur new-arg0 new-arg1))
(get-my-arg-list))