I complained about the awkwardness of processing alternating lists, such as in
(let (var1 form1 var2 form2) ...), because ordinary collection operations don't understand them. But this is easy to fix. Arc's assignment operator uses an alternating list:
(= a 1 b 2) is
(do (= a 1) (= b 2)), just like
setf in Common Lisp. So Arc has a function
pair to convert
(a 1 b 2) to
((a 1) (b 2)). A look through the Arc source shows it's always used with some sort of
map, so there's still some repetition to remove. But it reduces the added difficulty of processing alternating lists to one function call. The inverse operation is easily accomplished with some sort of
mappend. So difficulty of processing alternating lists is not really a significant problem.
My other objection was that they're hard to read. But alternating lists turn up in other places: keyword arguments, plists,
#s(...) syntax - anywhere you need to write a dictionary in sexprs. I don't find any of these especially hard to read, so I suspect my discomfort with alternating
let is just unfamiliarity. I suppose I should get used to it and stop complaining.