Right, but once again, adding a few characters may make things more consistent, but does it aid clarity? I really don't know either way.
Using the same heiroglyphics as I posted last time, we can implement 'case entirely as a function:
; Hypothetically, this uses the macros 'def, 'whenlet, 'iflet, and
; 'do; the functions 'if, 'testify, 'get, and 'apply; the special
; forms 'fn, 'zap, and 'quote; and the read macros
; #,x for (fn (gs123) (zap gs123 x)), #'x for (fn () x), and
; 'x for (quote x).
(def #,case (subject . args)
(whenlet (first . rest) args
(iflet (then . rest) rest
; Check the testified result of (first) against the subject.
(if (.subject:testify:do.first)
; Return the result of (then).
then
#'(apply case-part-2 subject rest))
; Return the result of (first). It's the last else.
first)))
; was (case x y (dosomething))
(case x #''y dosomething)
This is even an overall brevity boost, I think. What do you think of its clarity? I seriously might try this out in Penknife....
Though it reminds me a little on how clojure handles inline anonymous functions, which I really like:
#{+ %1 %2} ;% being the args, %1 being the first, %2 the second, and so on
wondering if something similar is possible with case:
(case x #(myfun)(dosomething))
yet still able to:
(case x 'y (dosomething))
note: Sorry if I missed something and am suggesting non-sense stuff, I haven't yet looked into the code details you provided - so I could be out to lunch.
All the necessary assumptions are listed in the top comment though (assuming you can intuit my intentions for the 'iflet macro, etc.). It's by no means implemented. ^^
Also, I welcome any switch in the heiroglyphics that makes them more readable. In Penknife, where there are infix operators but no read macros, I'd probably represent #''y as "thunk:sym.y" or "sym.y^". In Arc, ^'y looks like a good choice. Maybe :y or %y could be the zapper (or some better-suited abstraction over setforms).