> (let @S '((I . 0))
> (def 'count (curry (@S) () (job '@S (inc 'I))))
> (def 'reset (curry (@S) () (job '@S (zero I)))) )
> (let @S (list (cons 'I 0))
> (let I (cons 0)
I like it this way, thanks.
I also found that once the things inside the closures get complicated,
it might be worth using objects to get better code factoring:
(class +Counter) # i
(dm T () (=: i 0))
(dm count> () (inc (:: i)))
(dm reset> () (=: i 0))
(let @C (list (cons 'C (new '(+Counter))))
(def 'count (curry (@C) () (job '@C (count> C))))
(def 'reset (curry (@C) () (job '@C (reset> C)))) )
Or using objects directly so that I can have many independent
counters... It did the job for my understanding of closures in
picoLisp, I hope:-)
> Sometimes non-evaluating functions are a little more convenient, and
> at least theoretically more efficient.
> (zero A) occupies two cells.
> (zero 'A) would be three, and that's the same as (setq A 0), so it
> would not save any space.
Have you measured and/or noticed impact on performance of these
micro-optimizations? I mean, are they really worth it?
UNSUBSCRIBE: mailto:[EMAIL PROTECTED]