如果没有使用haskell函数
,还有另一种方法可以执行此功能 mymin :: (Ord a) => [a] -> a
mymin [] = error "empty list"
mymin [x] = x
mymin (x:xs)
| x < mt = x
| otherwise = mt
where mt = mymin xs
告诉我mymin :: (Ord a) => [a] ->a
是什么意思?
答案 0 :(得分:11)
如果您不允许使用其他功能,那么您的方式很好。
你可以做到
min' [] = error "empty list"
min' (x:xs) = minhelper x xs where
minhelper m [] = m
minhelper m (y:ys) | y < m = minhelper y ys
| otherwise = minhelper m ys
但我不认为它比你的一般用途更好。它会跟踪递归调用的最小值m
。
我们可以将minhelper的第二个案例重写为
minhelper m (y:ys) = minhelper (if y<m then y else m) ys
利用在Haskell中的事实,if-then-else处理表达式而不是指令。
mymin :: Ord a => [a] -> a
Ord a =>
表示mymin函数适用于在其上定义了不等式a
的类型(<=)
。 (它定义为here。)同样,如果它说Eq a =>
意味着它适用于在其上定义了等级a
的类型(==)
。
[a] -> a
表示需要a
个列表,并为您提供a
。
答案 1 :(得分:9)
由于AndrewC已经解释了mymin :: Ord a => [a] -> a
的含义。另一个功能可能是:
mymin :: (Ord a) => [a] -> a
mymin [] = error "empty list"
mymin [x] = x
mymin (x:y:xs) = if x < y then mymin(x:xs) else mymin(y:xs)
或
mymin :: (Ord a) => [a] -> a
mymin [] = error "empty list"
mymin [x] = x
mymin (x:y:xs) = mymin ((if x < y then x else y):xs)