[Haskell-beginners] Indentation of local functions
Miguel Pignatelli
miguel.pignatelli at uv.es
Mon Feb 16 10:32:23 EST 2009
Hi all,
This is my first post in this forum, I'm pretty new to Haskell
(although I have some previous experience in functional programming
with OCaml).
I'm trying to write the typical function that determines if a list is
a palindrome.
The typical answer would be something like:
isPalindrome xs = xs == (reverse xs)
But I find this pretty inefficient (duplication of the list and double
of needed comparisons).
So I tried my own version using just indexes:
isPalindrome xs =
isPalindrome' 0 (length xs)
where isPalindrome' i j =
if i == j -- line 43
then True
else
if (xs !! i) == (xs !! (j-1))
then isPalindrome' (i+1) (j-1)
else False
But, when trying to load this in ghci it throws the following error:
xxx.hs:43:12: parse error (possibly incorrect indentation)
Failed, modules loaded: none.
(Line 43 is marked in the code)
I seems that the definition of isPalindrome' must be in one line. So,
this works as expected:
isPalindrome xs =
isPalindrome' 0 (length xs)
where isPalindrome' i j = if i == j then True else if (xs !! i)
== (xs !! (j-1)) then isPalindrome' (i+1) (j-1) else False
Is there any way to make the local definition of isPalindrome' more
readable?
Any help in understanding this would be appreciated
Thanks in advance,
M;
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.haskell.org/pipermail/beginners/attachments/20090216/928bea69/attachment-0001.htm
More information about the Beginners
mailing list