(= some-function (fn () ...)) (= (some-function parm parm) x)
(= (some-function . body) x)
(some-function ,@body ,x)
(p-m:fn (param param) (reader ...) (param param val) (writer ...))
(fn (param param . possible-value) (if possible-value (let val (car possible-value) (writer ...)) (reader ...)))
However, this won't work with variable-arity functions.
-----
(mac defset (name parms . body) (w/uniq gexpr `(sref setter (fn (,gexpr) (let ,parms (cdr ,gexpr) ,@body)) ',name)))
(defset car (x) (w/uniq g (list (list g x) `(car ,g) `(fn (val) (scar ,g val)))))