Andrew Lentvorski wrote:
Gus Wirth wrote:
Problem one: The examples immediately start to use function
overloading even when the functions are not related except for the
fact they happen to be in the same module. To me this is the epitome
of stupid instruction as well as bad programming. Not only does it
introduce a concept before its time but it serves to confuse and
obscure the operation of the program.
I presume you are referring to:
-module(tut2).
-export([convert/2]).
convert(M, inch) ->
M / 2.54;
convert(N, centimeter) ->
N * 2.54.
I'll somewhat defend this one (but not the next one, see below). This
appears as function overloading to those coming from a different
language. I will agree, though, that this should probably be flagged
out since it caused confusion.
This is really rule matching and you *MUST* get this concept immediately
or you cannot proceed with the language.
Those are *not* different functions. They are two clauses of the *same*
function. Note that the first ends with a ";" and the second ends with
a "."
[snip]
No, that part I got. It's just a different way of writing IF statements
in other languages. Anyone who doubts that should just try describing
what it does in English. IF param1 is this AND/OR param2 is this THEN
RETURN some_result, ELSE continue_to_next_section. The problem is with
this from section 2.9:
-module(tut6).
-export([list_max/1]).
list_max([Head|Rest]) ->
list_max(Rest, Head).
list_max([], Res) ->
Res;
list_max([Head|Rest], Result_so_far) when Head > Result_so_far ->
list_max(Rest, Head);
list_max([Head|Rest], Result_so_far) ->
list_max(Rest, Result_so_far).
And this one:
Now an example of this when working with lists - reversing the order of
a list:
-module(tut8).
-export([reverse/1]).
reverse(List) ->
reverse(List, []).
reverse([Head | Rest], Reversed_List) ->
reverse(Rest, [Head | Reversed_List]);
reverse([], Reversed_List) ->
Reversed_List.
There was no reason at all to use function overloading here. The purpose
of a tutorial is make concepts stand out. There are two different
list_max functions and reverse functions here which do different things.
I could see showing a function say to_string that will convert anything
to a string, but the above examples are unnecessarily confusing.
Unfortunately, the way these are described seems to be a programming
convention of whoever wrote this
Gus
--
[email protected]
http://www.kernel-panic.org/cgi-bin/mailman/listinfo/kplug-lpsg