完成以下函数定义:
-- 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
那我不知道如何进行。如何测试代码是否有效?看起来是否正确?
答案 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
对吗? 否。此处没有涉及一种情况:如果x
和y
相同,则将引发错误:
*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