我有以下代码:
minmax1, minmax2, minmax3 :: [Int] -> (Int, Int)
minBound :: Int = -9223372036854775808
maxBound :: Int = 9223372036854775807
minmax1 arr = (minimum(arr), maximum(arr))
main = do
let list1 = [1, 2, 3]
let list2 = [1, 9, 3]
let list3 = [3, 2, 1, 0]
let list4 = [100]
let list5 = []
putStrLn $ show list1 ++ " -> " ++ show (minmax1 list1)
putStrLn $ show list2 ++ " -> " ++ show (minmax1 list2)
putStrLn $ show list3 ++ " -> " ++ show (minmax1 list3)
putStrLn $ show list4 ++ " -> " ++ show (minmax1 list4)
putStrLn $ show list5 ++ " -> " ++ show (minmax1 list5)
Run Code Online (Sandbox Code Playgroud)
为了获得以下结果:
-- minmax1 [1,2,3] = (1,3)
-- minmax1 [1,9,3] = (1,9)
-- minmax1 [3,2,1,0] = (0,3)
-- minmax1 [100] = (100,100)
-- minmax1 [] = (9223372036854775807,-9223372036854775808)
Run Code Online (Sandbox Code Playgroud)
如果数组不为空,则很容易获得上面的值.但是当输入为minmax1空数组时,我应该如何修改我的代码以获取上面的值?
您只需使用支票查看空列表:
minmax1 [] = (maxBound,minBound)
minmax1 arr = (minimum arr, maximum arr)Run Code Online (Sandbox Code Playgroud)
请注意,您不必定义minBound和您maxBound自己:Int是一个实例,Bounded因此具有这样的边界:
Prelude> maxBound :: Int
9223372036854775807
Prelude> minBound :: Int
-9223372036854775808
Run Code Online (Sandbox Code Playgroud)