После долгого медитирования над макросами родилась маленькая задачка.
Напишите макрос на CommonLisp, который бы рекурсивно менял вхождения элемента в качестве функции в данном списке на заданную последовательность. То есть в случае исходного списка (foo 1 2 (foo 5 (foo 100 1000))), заменяемого элемента foo и заданной последовательности из одного элемента "+" должны получить форму (foo 1 2 (foo 5 (foo 100 1000))).
иными словами, если имя написанного макроса functional-replace должны наблюдать такую картину:
(macroexpand-1 '(functional-replace (foo 1 2 (foo 5 (foo 100 1000))) foo (+)))
результат: (+ 1 2 (+ 5 (+ 100 1000)))
соответственно форма (functional-replace (foo 1 2 (foo 5 (foo 100 1000))) foo (+))
должна быть интерпретирована в результат 1108