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

Reply via email to