mirror of
				https://github.com/janet-lang/janet
				synced 2025-10-31 07:33:01 +00:00 
			
		
		
		
	Allow one-term :range and :down forms
				
					
				
			This commit is contained in:
		| @@ -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}] | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 primo-ppcg
					primo-ppcg