On 8/18/05, Kevin Smith <kevin@electricanvil.com> wrote:
(define-macro (print-line msg) (list `(display ,msg) `(newline)))
When I try to use the macro from the repl I get the error message:
(print-line "hi") hi ***ERROR in (console)@38.1 -- Operator is not a PROCEDURE
Consider the expansion of the macro: (print-line "hi") -> ((display "hi") (newline)) Therefore (display "hi") is evaluated (causing the side-effect of printing "hi") and then we have: (<result of display> (newline)) Now I believe that (newline) will be evaluated giving: (<result of display> <result of void>) and gambit complains that <result of display> isn't a function which can be called. Which is fair enough since it's the value #!void (aka NULL). If I were writing that macro I would do something like: (define-macro (print-line msg) `(begin (display ,msg) (newline)) Hope that helps. AGL -- Adam Langley agl@imperialviolet.org http://www.imperialviolet.org (+44) (0)7906 332512 PGP: 9113 256A CC0F 71A6 4C84 5087 CDA5 52DF 2CB6 3D60