[lisp][etude] functional replacer macro
От: A13x США  
Дата: 22.10.09 14:30
Оценка:
После долгого медитирования над макросами родилась маленькая задачка.

Напишите макрос на 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
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.