On Feb 18, 2007, at 21:26 , P. R. Stanley wrote:
mylen (x:y) = 1 + mylen y
The base case, if that is the right terminology, stipulates that
the recursion ends with an empty list and returns 0. Simple though
one question - why does mylen require the parentheses even when it
is evaluating the length of [...]? I can understand the need for
them when dealing with x:... because of the list construction
Because it would expect three parameters without the parentheses.
":" is a perfectly valid variable name; the convention in Haskell is
that such names represent infix functions, but this is only a
convention. The ability to use such names is convenient when passing
operators or functions as parameters (this is, after all, functional
programming!).
BTW, it might also help to understand how mylen is rewritten by the
compiler:
mylen xx = case xx of
[] -> 0
(x:xs) -> 1 + mylen xs
("xx" being actually an internal identifier which will never conflict
with any name you use)
going back to Don's formal definition of the list data structure:
data [a] = [] | a : [a]
A list is either empty or contains an element of type a? Correct,
wrong or very wrong?
Either empty, or an "a" consed with (the ":" is pronounced "cons") a
list of "a". This is a recursive definition. "a" is an unspecified
type; the formal definition allows any number (including zero, via
[]) of values of the same unspecified type to be combined into a list
recursively as a : a : a : ... : [].
The [a,a,a...] syntax is a convenient alternative syntax for
a:a:a:...:[]; the two forms are completely equivalent, but the cons
syntax is more convenient for pattern matching a list as (head:tail).
--
brandon s. allbery [linux,solaris,freebsd,perl] [EMAIL PROTECTED]
system administrator [openafs,heimdal,too many hats] [EMAIL PROTECTED]
electrical and computer engineering, carnegie mellon university KF8NH
_______________________________________________
Haskell-Cafe mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/haskell-cafe