1
0
mirror of https://github.com/janet-lang/janet synced 2025-02-02 18:29:10 +00:00

Fix if-let when-let and add put-in (assoc-in)

This commit is contained in:
Gavlooth 2018-03-25 11:30:30 +03:00
parent 1bc5705667
commit 5ff0367d0f
2 changed files with 23 additions and 3 deletions

22
examples/utils.dst Normal file
View File

@ -0,0 +1,22 @@
(defn put-in [coll keys val]
(defn assoc [the-coll n]
(if-let [current-key (get keys n)
current-val (get the-coll current-key)]
(put the-coll current-key (assoc current-val (inc n)))
val))
(assoc coll 0))
(defn update-in [coll keys an-fn]
(def new-keys (array-slice coll 0 -2) )
(def last-key (get (array-slice coll -1 -2) 0))
(defn assoc [the-coll n]
(if-let [current-key (get keys n)
current-val (get the-coll current-key)]
(put the-coll current-key (assoc current-val (inc n)))
( update the-coll last-key an-fn )))
(assoc coll new-keys 0))
;; (defn update-in-test [ ] (update-in @{:a "x" :b {:y {"pipa" 3}}} [:b :y "pipa"] type))

View File

@ -371,7 +371,6 @@ If no match is found, returns nil"
all the forms with let and evaluates the first expression else
evaluates the second"
[bindings then else]
#(tuple 'print (tuple '> (tuple 'length bindings) 2))
(tuple 'let bindings
(tuple 'if (tuple 'and (tuple 'get bindings 1)
(tuple 'if
@ -384,8 +383,7 @@ If no match is found, returns nil"
"Takes the first one or two forms in vector and if true binds
all the forms with let and evaluates the body"
[bindings & body]
(def head (ast-unwrap1 bindings))
(tuple 'let head
(tuple 'let bindings
(tuple
'when
(tuple 'and (tuple 'get bindings 1)