Мне нужно заменить все вхождения (g param) на (begin (display "g: ") (display 'param) param) Причём в выражении произвольной вложенности, например в (let [(x 1)] (g x)) Все остальные выражения должны остаться без изменений. Сделал такой макрос: (define-syntax g-processor (syntax-rules (g) [(_ (g x)) (begin (display "g: ") (display 'x) (newline) x)] [(_ (x . y)) ((g-processor x) . (g-processor y))] [(_ x) x])) Но он не работает. Например: (g-processor (+ 1)) -> ((g-processor +) . (g-processor (1)) -> (+ . (g-processor (1))) == (+ g-procesor (1)), и здесь, конечно, всё стопорится, потому что g-processor не в позиции применения, и получается invalid syntax. По идее должно быть просто — прогуляться по двоичному дереву и заменить все вхождения (g x) на нужное выражение, но не получается.
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.
Похожие темы
- Форум Снова макросы Racket (2013)
- Форум [scheme][haskell][oop][fp] Мысли вслух (2012)
- Форум mcedit, macros (2012)
- Форум [филология] Macro (2011)
- Форум OpenOffice macros (2009)
- Форум nasm macro (2015)
- Форум Lisp Macro (2007)
- Форум Scheme (2011)
- Форум Scheme (2006)
- Форум Scheme (2005)