Second option, part a: I actually find `~empty?` clearer than `some` in this case. Also `some` means something different in Arc.
Second option, part b: wait, then `(if xs ...)` would sometimes not do the opposite of `(if (no xs) ...)`!
(expect subject pattern else
then)
->
(match subject
[pattern then]
[_ else])
If Arc came with a similar pattern-matching DSL and `expect`, we could write this: (def map1 (f xs)
(expect xs (cons x xs) ()
(cons (f x) (map1 f xs))))
The line "expect xs (cons x xs) ()" conveys "If xs isn't a cons cell, finish with an empty list. Otherwise, proceed with x and xs bound to its car and cdr."-----