Haskell-编码“最大值”而未实际使用函数[初学者]

时间:2018-09-11 09:15:22

标签: haskell

完成以下函数定义:

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

我应该使用Haskell中的'maximum'函数完成此任务

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

那我不知道如何进行。如何测试代码是否有效?看起来是否正确?

1 个答案:

答案 0 :(得分:8)

您可以通过调用 (您自己或使用测试库,例如QuickCheck)来测试该函数。例如,我们可以将源代码存储在文件(名为test.hs)中:

-- test.hs

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

然后,我们可以例如使用ghci命令来启动GHC交互式会话,并通过传递文件名作为参数来加载文件。然后我们可以称之为:

$ 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 

对吗? 。此处没有涉及一种情况:如果xy相同,则将引发错误:

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

我们可以通过使用otherwise作为最后检查来修复它,该检查将始终为True(实际上,它是True的别名)。您可以将otherwise视为else

-- test.hs

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