On Tuesday 25 October 2005 08:36 pm, michael@schmong.org wrote:
Hi, My name is Michael. I'm new to Haskell. I'm working through The Craft of Functional Programming by Simon Thompson. I'm having problems with a few exercises from chapter 4. I will present one per post.
This one is from 4.9 Given a function f of type Int -> Int give a recursive definition of a function of type Int -> Int which on input n returns the maximum values f 0, f 1, ... , f n
I defined f as follows f 0 = 0 f 1 = 44 f 2 = 5 f 9 = 8
Most likely your problem is that f is only defined for input values 0, 1, 2 and 9. If you call f with any other value, you will end up with an error.
this works except when f n > n. In that case I get an "illegal instruction" error and hugs exits. I'm pretty sure this is a logic problem. Could someone point me in the right direction so I can think about this problem correctly. Here is my code
maxOverf :: Int -> Int maxOverf m
| f m > m = (f m) | otherwise = (maxOverf m-1)
Here you are calling f with successively decreasing values; that will run into areas where f is undefined for any value of m other than 1 or 2.
Any hints/help/flames welcome. Thanks
Try a total rather than a partial function for f. You can just add a default clause to the end, like f _ = 0 which will define f x to be 0 for all values of x except the ones already mentioned.