jub*_*kon 0 recursion haskell functional-programming pattern-matching parse-error
我有一个获取列表并必须返回其最小元素的函数。
不幸的是,我一直遇到这个问题:
解析模式错误:最小
我做错了什么?
minim :: [Int] -> Int
minim [] = 0
minim [x] = x
minim x:xs = min x (minim xs)
min :: Int -> Int -> Int
min a b
| a > b = b
| a < b = a
Run Code Online (Sandbox Code Playgroud)
如果您想以最Haskell的方式解决它。我会这样解决:
-- Does not work for empty lists (so maybe needs to be wrapped in some logic)
foldr1 min [-3,1,2,3]
-- Works for empty but needs a "default value" (in this case 0)
foldr min 0 [-3,1,2,3]
Run Code Online (Sandbox Code Playgroud)
如果您想通过自己实施来学习,那么这对我有用
minim :: [Int] -> Int
minim [] = 0
minim [x] = x
minim (x:xs) = min x (minim xs)
min :: Int -> Int -> Int
min a b
| a > b = b
| a < b = a
| a == b = a
Run Code Online (Sandbox Code Playgroud)
但是,我会使其更安全些,因为如果它为空,则列表中最小的int真的为0吗?我认为您应该使用它Nothing作为结果。
import Data.Maybe
import Prelude hiding (min)
main = print $ minim [1,3,4, 6,6,-9]
minim :: [Int] -> Maybe Int
minim [] = Nothing
minim [x] = Just x
minim (x:xs) = min x <$> minim xs
min :: Int -> Int -> Int
min a b
| a > b = b
| a < b = a
| a == b = a
Run Code Online (Sandbox Code Playgroud)