Ura*_*rah 2 haskell functional-programming
有没有使用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
Run Code Online (Sandbox Code Playgroud)
并告诉我什么mymin :: (Ord a) => [a] ->a意思?
And*_*ewC 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
Run Code Online (Sandbox Code Playgroud)
但我不认为它比你的一般用途更好.它跟踪m递归调用的最小值.
我们可以重写minhelper的第二个案例
minhelper m (y:ys) = minhelper (if y<m then y else m) ys
Run Code Online (Sandbox Code Playgroud)
利用在Haskell中if-then-else处理表达式而不是指令的事实.
mymin :: Ord a => [a] -> a
Run Code Online (Sandbox Code Playgroud)
Ord a =>表示mymin函数适用于在其上定义a不等式的类型(<=).(它在这里定义.)同样,如果它说Eq a =>这意味着它适用于在它们上定义了a相等的类型(==).
[a] -> a意味着它需要一个as 列表并给你一个a回报.
由于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)
Run Code Online (Sandbox Code Playgroud)
要么
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)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7043 次 |
| 最近记录: |