On 1/10/06, Hoehle, Joerg-Cyril Joerg-Cyril.Hoehle@t-systems.com wrote:
Attila Lendvai wrote:
And finally a new version of if-first-iteration:
That's more or less that, minor a few points (a documentation string, bind step-body after first-usage to avoid setf, usage of make-accum-var-binding, and probably eliminate the no-else code generation test (let the compiler do that)).
I'll add it to the next version (not immediately, I'm too busy right now). I hope this is ok.
Sure! I assume from your mail that you are planning to do all this when you get to it (this entire stuff is probably a few minutes for you probably :). I will keep on playing with it mostly for my own education, and if I'm faster then you can get to it i will send another patch.
One more thing, tough: now that I was looking at it from a birds view, I think a first-iteration-p would be more useful then an entire if-... construct. Same for first-time-p
BTW, what's the iteration pattern that lead you to define this and not use IF-FIRST-TIME? Could you show some sample/imaginary code?
I use it in a test-case defining macro, which iterates on it's body where each car is a type specifier, similar to :method in defgeneric. But at the first element it's optional, in which case the entire body is interpreted as one element of a default type (one less level of parens).
IIRC something like:
(iter (for (type . body) in bodies) (cond ((eq type :test) (collect `(... ,@body))) (...) (t (if-first-iteration (return `(... ,@bodies)) (error "Unexpected typeless element encountered, only the first element may be typeless"))..).)...)...)) :)
And btw this is the same place where I'd love to have the mentioned "it" reference: (finally (return `(progn ,@it)))
Thanks for your contribution.
My pleasure! I've learned a lot about compiled DSL's, or however it's named, from iterate.
- attila