[erlang-questions] illegal guard expression with lists:nth
Richard O'Keefe
ok@REDACTED
Thu Jun 11 23:46:39 CEST 2009
On 11 Jun 2009, at 9:53 pm, Roberto Ostinelli wrote:
>
> let's say mine is kind of a 'feature request', since 'case'
> expressions do allow this and 'if' ones, not. therefore i was
> questioning whether i'm missing a point why this shouldn't be done
> in practice.
Surely this is in a FAQ somewhere?
There used to be a 'cond' proposal.
As I understand it, the idea was that
cond E -> B end
=>
case E of true -> B end
cond E -> B ; Rest end
=>
case (fun () -> case E
of true -> {X1,...,Xn}
; false -> false
end
end)()
of {X1,...,Xn} -> B
; false -> cond Rest end
end
where X1,...,Xn are the variables that are bound by E.
I don't know what happened to 'cond'. It certainly never got
implemented, which is fair enough, because we really do not need it.
EEP-0025 (which was intended to have the same semantics with
respect to the scope of bindings introduced in E) does the same
kind of thing with
case E1 of true -> B1
; or case E2 of true -> B2
; or case E3 of true -> B3
; false -> B0
end
But all this is over-elaborate. As argued at length in the threads
we've had on this subject, over-using Boolean is often a mistake in
_any_ programming language. It is always best to discuss concrete
examples, but so far, there is almost always a better way to do it
than 'if', and when there isn't, usually a redesign of the function
you want to call makes _everything_ better.
More information about the erlang-questions
mailing list