mirror of
https://github.com/janet-lang/janet
synced 2024-12-26 08:20:27 +00:00
Merge pull request #1278 from primo-ppcg/loop-range
Allow one-term `:range` and `:down` forms
This commit is contained in:
commit
bfb60fdb84
@ -419,9 +419,11 @@
|
|||||||
(error (string "expected tuple for range, got " x))))
|
(error (string "expected tuple for range, got " x))))
|
||||||
|
|
||||||
(defn- range-template
|
(defn- range-template
|
||||||
[binding object rest op comparison]
|
[binding object kind rest op comparison]
|
||||||
(let [[start stop step] (check-indexed object)]
|
(let [[start stop step] (check-indexed object)]
|
||||||
(for-template binding start stop (or step 1) comparison op [rest])))
|
(case kind
|
||||||
|
:range (for-template binding (if stop start 0) (or stop start) (or step 1) comparison op [rest])
|
||||||
|
:down (for-template binding start (or stop 0) (or step 1) comparison op [rest]))))
|
||||||
|
|
||||||
(defn- each-template
|
(defn- each-template
|
||||||
[binding inx kind body]
|
[binding inx kind body]
|
||||||
@ -477,10 +479,10 @@
|
|||||||
(def {(+ i 2) object} head)
|
(def {(+ i 2) object} head)
|
||||||
(let [rest (loop1 body head (+ i 3))]
|
(let [rest (loop1 body head (+ i 3))]
|
||||||
(case verb
|
(case verb
|
||||||
:range (range-template binding object rest + <)
|
:range (range-template binding object :range rest + <)
|
||||||
:range-to (range-template binding object rest + <=)
|
:range-to (range-template binding object :range rest + <=)
|
||||||
:down (range-template binding object rest - >)
|
:down (range-template binding object :down rest - >)
|
||||||
:down-to (range-template binding object rest - >=)
|
:down-to (range-template binding object :down rest - >=)
|
||||||
:keys (each-template binding object :keys [rest])
|
:keys (each-template binding object :keys [rest])
|
||||||
:pairs (each-template binding object :pairs [rest])
|
:pairs (each-template binding object :pairs [rest])
|
||||||
:in (each-template binding object :each [rest])
|
:in (each-template binding object :each [rest])
|
||||||
|
@ -204,6 +204,12 @@
|
|||||||
(assert (deep= (seq [x :down-to [10 0]] x) (seq [x :down [10 -1]] x))
|
(assert (deep= (seq [x :down-to [10 0]] x) (seq [x :down [10 -1]] x))
|
||||||
"loop :down-to")
|
"loop :down-to")
|
||||||
|
|
||||||
|
# one-term :range forms
|
||||||
|
(assert (deep= (seq [x :range [10]] x) (seq [x :range [0 10]] x))
|
||||||
|
"one-term :range")
|
||||||
|
(assert (deep= (seq [x :down [10]] x) (seq [x :down [10 0]] x))
|
||||||
|
"one-term :down")
|
||||||
|
|
||||||
# 7880d7320
|
# 7880d7320
|
||||||
(def res @{})
|
(def res @{})
|
||||||
(loop [[k v] :pairs @{1 2 3 4 5 6}]
|
(loop [[k v] :pairs @{1 2 3 4 5 6}]
|
||||||
|
Loading…
Reference in New Issue
Block a user