Stories
Slash Boxes
Comments
NOTE: use Perl; is on undef hiatus. You can read content, but you can't post it. More info will be forthcoming forthcomingly.

All the Perl that's Practical to Extract and Report

The Fine Print: The following comments are owned by whoever posted them. We are not responsible for them in any way.
 Full
 Abbreviated
 Hidden
More | Login | Reply
Loading... please wait.
  • You've just evaluated x twice when the person writing (++ x) expected x to be evaluated once.

    I consulted the manual and came up with this which doesn't work because the original x isn't getting updated anymore.

    (defmacro ++ (x)
        "Increment the value of symbol X, returning the new value"
        (let ((xt (make-symbol "quoted-x")))
            `(let ((,xt (quote ,x)))
                  (set ,xt (+ 1 (eval ,xt))))))

    This fixes three bugs. x is ev
    • You've just evaluated x twice when the person writing (++ x) expected x to be evaluated once.

      Oh, I didn't think of that! I was only thinking of passing in a symbol constant. But now I see what you mean. [emacswiki.org]

      As to the general hardness of Lisp macros: I'm glad it's not just me that thinks that.

      Maybe there's just some kind of magic syntax-highlighty thing in (e)lisp mode that will turn on all the happy macro easiness or something.

      Emacs is a pathless land.

      • I goofed slightly. I'd written an earlier version which didn't work and it looks like I left the text that mentioned that it didn't work. The one I eventually posted does work.

        As for making macros easier, I'm sure the Scheme folks have stuff on this. I'm a novice at this but I could guess that you might write something to check that each value is only used once. Something to do with data flows maybe.