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.
No comments:
Post a Comment
It's OK to comment on old posts.