
Here's one solution:isPalindrome xs =
isPalindrome' 0 (length xs)
where isPalindrome' i j = if i == j then True else check i j
check i j = if (xs !! i) == (xs !! (j-1)) then recurse i j
else False
recurse i j = isPalindrome' (i+1) (j-1)
On Mon, Feb 16, 2009 at 10:32 AM, Miguel Pignatelli wrote: 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; _______________________________________________
Beginners mailing list
Beginners@haskell.org
http://www.haskell.org/mailman/listinfo/beginners