[erlang-questions] I think I wish I could write case Any of whatever -> _ end.
Eric Newhuis (personal)
enewhuis@REDACTED
Wed May 19 05:11:13 CEST 2010
I appreciate all your comments.
I still don't like temporary variables like X or whatever because they contain no semantic quality and there is a tension between short names to make the pattern obvious and longer names for reunderstanding.
(Oh, I write plenty of small functions. Its small functions all the way down.)
But I should stop interrupting you with something so trivial so you can get those frames implemented. I loathe the record syntax.
On May 18, 2010, at 10:01 PM, Richard O'Keefe wrote:
>
> On May 18, 2010, at 3:25 PM, Eric Newhuis (personal) wrote:
>>
>> And the reconstruction of a small tuple bugged me. Your suggestion shortens this to something arguably easier to type.
>>
>> case X = find(...) of
>> error ->
>> {ok, Default};
>> {ok, Value} ->
>> X
>> end.
>
> There are two things here. One is that it gets even simpler:
> Value can be replaced by a wild-card. The other is that the
> Haskell idiom for something like this would be to define a
> function
>
> error_default(X = {ok,_}, _Default) -> X;
> error_default(error, Default) -> {ok,Default}.
>
> and then write
>
> error_default(find(...), Default)
>
> If the Default is an expression which you don't want evaluated at
> all in the normal case, you might prefer a macro.
>>
>> ...without the apparent overhead of reconstruction. (Is it a moot point due to a clever compiler?)
>
> I don't know and I don't care whether the compiler is that smart or
> not. What I care about is whether a HUMAN reader can see that the
> value that is returned is the value of find(...).
>>
>> But I guess I am still concerned about suggesting this as a general programming idiom because it introduces a temporary variable.
>
> In the name of suffering humanity,
> WHAT IS SO BAD ABOUT TEMPORARY VARIABLES?
>
> I grant you that there were software engineering proscriptions of
> "temporary variables" in the sense of scratch variables that got
> reused over and over with no specific semantics of their own.
> But the variables we are talking about here are no more "temporary"
> than any other Erlang variables. If you mean that the variable is
> used over a very narrow range, that's the direct *opposite* of
> what the preaching against temporary variables was about, and there
> is no harm in it at all, as long as you choose your names well.
>
>> And as such one would need to study pre- and post-logic to avoid accidental use of the same variable name to name something different.
>
> I'm sorry, but
> (A) this is trivial. Tell your editor "mark clause as region".
> [A simple hack for this is to go back to the first line that
> starts with a letter, apostrophe, or dash, then forward to just
> before the next such line. I don't actually have this command
> at the moment, so I'd do Ctrl-_ Meta-Ctrl-R, Ctrl-@, Meta-Ctrl-R.]
> Then tell your editor "list variables in region". [I don't have
> this at the moment, but I do have code for Prolog that I could
> adapt to do it.] The Smalltalk IDE I often use already has
> "list variables in scope".
>
> (B) Even without that, it's trivial. Mark the region as before,
> then "find word within region". Don't find it? You're safe.
>
> (C) I am at a loss to think of what kind of programming would make
> this a problem. You are making up a name to stand for a meaning
> that doesn't _have_ a name yet. Of *course* it gets a name that
> is different from the other names; it *means* something different
> so you give it a different name automatically.
>
> X is just an example that's been used in a vacuum.
> In real life, with real examples, in reasonable Erlang code,
> there shouldn't be a problem, especially if you use little
> functions like the error_default/2 example above (which can be
> inlined by the compiler).
>>
>> I'd not have this concern if Erlang had a LET construct:
>
> True. You would have a different concern, that of accidentally
> hiding a variable you needed to refer to. It wouldn't be
> substantially different.
>
>> So apparently my idea isn't so great. And I also don't have a satisfying temporary-free and reconstruction-free solution.
>
> I don't have any solution to the problem of programming Erlang
> without using the letter 'e' either. I'm not worried about that.
>
> I don't see any problem with introducing variable names
> as long as they are meaningful in context. That's not Haskell
> style, but Erlang isn't Haskell.
>
> I don't see any problem with moving stuff out into other functions
> that are then inlined, above all, if the schema is one you can use
> again, it's a _good_ thing to do that. "Temporary variables" that
> are in another function entirely aren't any problem, are they?
>
> I think this is one huge issue:
>
> DON'T BE SCARED OF SMALL FUNCTIONS.
>
> Oh, and let's have real examples, please!
>
>>
More information about the erlang-questions
mailing list