[erlang-questions] Code generation (was NOOB)
Richard A. O'Keefe
ok@REDACTED
Wed Sep 6 05:29:25 CEST 2006
Jay Nelson <jay@REDACTED> wrote:
The fact that list comprehensions always construct a list is an
artifact of their genesis. I agree their syntax intentionally
suggests you are creating a list, but I still prefer the
readability even only for side effects. Using them and reading
them clicks my mind into erlang mode.
I once experimented with a Haskell-like syntax for Erlang.
To my pleased surprise "Herlang" code was usefully shorter than Erlang.
One of the things I did was to generalise list comprehension syntax:
[e1, e2, ... for p1 in l1 | g1 ... for pk in lk | gk]
-- list comprehension
{e1, e2, ... for p1 in l1 | g1 ...
-- tuple comprehension
(&& e1 for p1 in l1 | g1 ...)
-- bounded universal quantification
(|| e1 for p1 in l1 | g1 ...)
-- bounded existential quantification
(,, e1, e2, ... for p1 in l1 | g1 ...)
-- "for loop" done for side effects
I would have added syntax for max, min, and sum, but they weren't common
enough in the Erlang code I was rewriting to bother. Note that Haskell
doesn't need special syntax for 'any' (||...) and 'all' (&&...) because
it is lazy; a strict language does need special syntax for these rather
useful cases.
I am *not* recommending this particular syntax, just noting that
"generators with guards" CAN be liberated from "constructing a list"
and that doing so would be even clearer than constructing a list which
is "obviously" thrown away.
I also note that precisely this liberation is part of the
(let p1 = i1 then s1, .... [More Erlangish: let p1 = i1 then s1, ...
for <generators> for <generators>
in <result> in <result>
) end]
syntax that I *have* proposed in this mailing list. As that was invented
as a generalisation of folding, it doesn't handle 'foreach' particularly
well. The point is that we *could* have generators in syntax other than
list comprehension syntax, and it may be worth exploring _which_ other
syntax would be useful.
More information about the erlang-questions
mailing list