macro boot.janet on line 2042, 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