This macro sets variables in parallel. (def interleave lists
(apply mappend list lists))
(mac pset vars-and-vals
(withs (pairs (pair vars-and-vals)
vars (map car pairs)
vals (map cadr pairs)
uniqs (n-of (len vals) (uniq)))
`(with ,(interleave uniqs vals)
(assign ,@(interleave vars uniqs)))))
It got my attention when I saw it used in a fibonacci function. Here's an Arc version: (def fib (n)
(with (a 0 b 1)
(repeat (1- n)
(pset a b b (+ a b)))
b))
Testing in Jarc: Jarc> (map fib (range 1 9))
(1 1 2 3 5 8 13 21 34)
|