macro
boot.janet on line 2357 , column 1
(varfn name & body )
Create a function that can be rebound. `varfn` has the same
signature as `defn` , but defines functions in the environment as
vars. If a var `name` already exists in the environment , it is
rebound to the new function. Returns a function.
(var a nil )
(var b nil )
(varfn a
[x ]
(if (zero? x )
0
(b x )))
(varfn b
[y ]
(if (pos? y )
1
(a y )))
(a 1 )
# =>
1
(b 0 )
# =>
0
(defn greet-me [] (print "hey programmer!" ))
(defn greet-stranger [] (print "hey stranger!" ))
(varfn greet [] (greet-me ))
(greet ) # prints "hey programmer!"
(varfn greet [] (greet-stranger ))
(greet ) # prints "hey stranger!"
# kind of analogous to (def greet (fn [] (some-thunk))), but with built-in
# sugar to automatically update 'greet' if varfn is called with a name
# already bound