(def range (start end (o step (if (< start end) 1 -1))) (if (or (and (> step 0) (~> start end)) (and (< step 0) (~< start end))) (cons start (range (+ start step) end step)))) arc> (range 0 2) (0 1 2) arc> (range 2 0) (2 1 0) arc> (range 0 -2) (0 -1 -2) arc> (range 0 -9 -2) (0 -2 -4 -6 -8)
-----
(def unfold (f init) (aif (f init) (cons (car it) (unfold f (cdr it))) nil)) (def range-up (start end (o step 1)) (unfold [if (<= _ end) (cons _ (+ _ step))] start)) (def range-down (start end (o step 1)) (unfold [if (>= _ end) (cons _ (- _ step))] start)) (def range (start end (o step 1)) ((if (< start end) range-up range-down) start end step))
arc> (range 1 100 10) (1 11 21 31 41 51 61 71 81 91) arc> (range 1 -100 10) (1 -9 -19 -29 -39 -49 -59 -69 -79 -89 -99)
arc> (with (x 1 y '(2 3)) [a b c $x $$y]) (a b c 1 2 3)
arc> (map {prn _} '(1 2 3)) 1 2 3
arc> (tag (a #some-id .some-class)) <a id="some-id" class="some-class"></a> arc> (tag (#box (tag #menu))) <div id="box"><div id="menu"></div></div> arc> (tag (#box .fancy .hmm)) <div id="box" class="fancy hmm"></div>
(subseq "hello" 0 'end) "hello" (subseq "hello" 0 -1) "hell"