2

Complete the following function definition:

    -- maxi x y returns the maximum of x and y

I'm supposed to complete this task without using the 'maximum' function in Haskell.

maxi :: Integer -> Integer -> Integer
maxi x y
 |x > y = x
 |y > x = y 

Then I don't understand how to proceed. How do I test if the code is valid? And does it look somewhat correct?

0

1 Answer 1

7

You can test the function by calling it (yourself or with a test library, like QuickCheck). We can for example store the source code in a file (named test.hs):

-- test.hs

maxi :: Integer -> Integer -> Integer
maxi x y
 |x > y = x
 |y > x = y 

Then we can for example start a GHC interactive session, by using the ghci command and load the file passing the file name as a parameter. We can then call it:

$ ghci test.hs
GHCi, version 8.0.2: http://www.haskell.org/ghc/  :? for help
[1 of 1] Compiling Main             ( test.hs, interpreted )
Ok, modules loaded: Main.
*Main> maxi 2 9
9
*Main> maxi 3 5
5
*Main> maxi 7 2
7 

Is it correct? no. There is a case here that is not covered: in case x and y are the same, then it will raise an error:

*Main> maxi 7 7
*** Exception: test.hs:(4,1)-(6,13): Non-exhaustive patterns in function maxi

We can fix it by using otherwise as last check, which will always be True (in fact it is an alias for True). You can see otherwise as an else:

-- test.hs

maxi :: Integer -> Integer -> Integer
maxi x y
 | x > y = x
 | otherwise = y 
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.