Attila Lendvai wrote:
[writing Iterate extensions using iterate::* instead of exported symbols.
And after looking at the code it wasn't obvious (for me, newbie warning).
Maybe I should add a comment here and there (in code and/or TeX documentation). The implementation somewhat obviously(?) uses the internal interfaces. So of course this leads to copy&paste of this code.
Actually, it's a critique of mine towards Iterate that I haven't yet identified a subset of primitives with which to write the many other Iterate clauses, and so that they work as efficiently as the predefined ones. It's missing this "growing a language" concept.
issuing a tla redo. Just in case...
Indeed, I'm not yet using arch/tla. For now it doesn't make much sense since I cannot (yet?) access common-lisp.net as a developer. Thanks for the info. I just recently jumped into darcs (cffi), but did not yet try out Arch or subversion.
Regards, Jörg Höhle.
Actually, it's a critique of mine towards Iterate that I haven't yet identified a subset of primitives with which to write the many other Iterate clauses, and so that they work as efficiently as the predefined ones. It's missing this "growing a language" concept.
As a small suggestion: I had trouble defining an internal named variable on demand for if-first-iteration. I had to misuse make-accum-var-binding with some (setf (cddr)) magic (could be it's only because I'm new to lisp, but that setf is a hack compared to the rest of the code).
Indeed, I'm not yet using arch/tla. For now it doesn't make much sense since I cannot (yet?) access common-lisp.net as a developer. Thanks for the info. I just recently jumped into darcs (cffi), but did not yet try out Arch or subversion.
We use darcs and it serves us well. Arch seems to be overcomplicated at first glance.
And finally a new version of if-first-iteration:
(def-special-clause IF-FIRST-ITERATION (then &optional else) (setf then (list (walk-expr then))) (setf else (list (walk-expr else))) (let* ((step-body nil) (entry (make-accum-var-binding 'first-iteration t nil :type 'boolean)) (first-iteration (first entry)) (first-usage (not (third entry)))) (when first-usage (setf step-body (list `(setf ,first-iteration nil))) (setf (cddr entry) (list t))) (return-code :body (list (if else `(cond (,first-iteration ,@then) (t ,@else)) `(when ,first-iteration ,@then))) :step step-body)))
bye,
- attila