在Haskell中处理函数中的错误
我有一个在Haskell中处理函数中的错误,haskell,Haskell,我有一个sign函数,它可以返回一个错误 signe :: Int -> Char signe chiffre | chiffre >= 1 && chiffre <= 9 = '+' | chiffre == 0 = '0' | chiffre >= -9 && chiffre <= (-1) = '-' | otherwise = error "Erreur in the sign" 它给了我 +
sign
函数,它可以返回一个错误
signe :: Int -> Char
signe chiffre
| chiffre >= 1 && chiffre <= 9 = '+'
| chiffre == 0 = '0'
| chiffre >= -9 && chiffre <= (-1) = '-'
| otherwise = error "Erreur in the sign"
它给了我
++0***异常:符号中有错误
我希望没有任何异常:
++0
在这种情况下,您可以而且应该使用或者:
signe chiffre
| chiffre >= 1 && chiffre <= 9 = Just '+'
....
| otherwise = Nothing -- parbleu!!
signes = mapMaybe signe
signe chiffre
|chiffre>=1&&chiffre更好的方法是实际使用Maybe
类型,它允许您直接返回Nothing
或Just aValue
。您可以将函数重写为
signe :: Int -> Maybe Char
signe chiffre
| chiffre >= 1 && chiffre <= 9 = Just '+'
| chiffre == 0 = Just '0'
| chiffre >= (-9) && chiffre <= (-1) = Just '-'
| otherwise = Nothing
signe::Int->Maybe Char
奇弗尔先生
|chiffre>=1&&chiffre=(-9)&&chiffre这个问题似乎已经得到了Ingo的回答,但我想指出的是,由于您在原始问题中有一条错误消息,也许“要么”是一个更好的选择
signe :: Int -> Either String Char
signe chiffre
| chiffre >= 1 && chiffre <= 9 = Right'+'
| chiffre == 0 = Right '0'
| chiffre >= -9 && chiffre <= (-1) = Right '-'
| otherwise = Left "Erreur in the sign"
signe::Int->任一字符串字符
奇弗尔先生
|chiffre>=1&&chiffre=-9&&chiffre我想以“大家好”开始我的消息,但即使编辑它也没有考虑到…mapMaybes-->“不在范围内”。(我在我的工作表顶部添加了“import Data.List”),所以我只尝试了signes=map signe,但我得到了[只是“+”,…,什么都没有]它实际上只是mappaybe
。谢谢你指出这一点,@AlexReinking,它实际上是mappaybe
,它在数据中。也许。始终将其与末尾有s的catMaybes混为一谈。上面更正了。我看了一下文档,在回答之前,我也试着用mapMaybe以防万一。同样的问题。。。以下是我的函数:导入数据。列表签名chiffre | chiffre>=1&&chiffre=-9&&chiffre Ingo感谢它的工作!!谢谢大家:)!!Haskell的另一个问题是:是否可以创建一个简单的代码来知道列表是否在增加?也许是foldr或其他的东西,但让事情变得简单?
signe :: Int -> Maybe Char
signe chiffre
| chiffre >= 1 && chiffre <= 9 = Just '+'
| chiffre == 0 = Just '0'
| chiffre >= (-9) && chiffre <= (-1) = Just '-'
| otherwise = Nothing
signe :: Int -> Either String Char
signe chiffre
| chiffre >= 1 && chiffre <= 9 = Right'+'
| chiffre == 0 = Right '0'
| chiffre >= -9 && chiffre <= (-1) = Right '-'
| otherwise = Left "Erreur in the sign"
signes liste = [ x | Right x<-map signe liste ]