Hi there,
I was reading "Real World Haskell" and found this paper. [1]
On the first page of the paper there is an example:
inc* (odds_Int [1,2,3])
= [2,4]
/= [4]
= odds_Int (inc* [1,2,3])
I tried to implement it in Haskell:
(I'm a newbie. I guess it's possible to write a better version.)
module Param where
import Prelude
odds :: [Int] -> [Int]
odds [] = []
odds [x] = if odd x
then [x]
else []
odds (x:xs) = if odds [x] == []
then odds xs
else [x] ++ odds xs
inc :: [Int] -> [Int]
inc [] = error "Empty list"
inc [x] = [succ x]
inc (x:xs) = inc [x] ++ inc xs
Looks fine:
*Param> odds [1,2,3]
[1,3]
*Param> inc [1,2,3]
[2,3,4]
But my results differ from the paper's:
*Param> inc (odds [1,2,3])
[2,4]
*Param> odds (inc [1,2,3])
[3]
I doubt that there is an error in the paper. So it seems that
something is wrong with my code. But I can't find the error. Could you
help me?
(Or there is no error at all and I misunderstood something.)
[1] http://ttic.uchicago.edu/~dreyer/course/papers/wadler.pdf
Thanks
_______________________________________________
Haskell-Cafe mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/haskell-cafe