gpt4 book ai didi

list - 在 Haskell 中索引列表时捕获异常

转载 作者:行者123 更新时间:2023-12-01 08:17:47 27 4
gpt4 key购买 nike

getChar :: Int -> IO Char
getChar n = do
c <- getLine
return (c !! n)

程序必须需要一个数字和一行,它会返回字符,但是如果数字太大,我如何捕获异常?

我试过这样但它似乎不起作用
getChar n   
= do
c <-getLine
| n>=0 && n < b
= return c !! n
| otherwise
= error "Too big number"
where
b = length c

这不是家庭作业,我试图让自己参与进来。谷歌没有给我有用的答案
无法在那里实现捕获。例子?

最佳答案

您可能想要稍微重组一些东西,因为您已经将 IO 混入了一些不必要的东西。把签名改成这样怎么样?

getChar :: Int -> String -> Maybe Char
getChar n x | n < length x = Just (x !! n)
| otherwise = Nothing

Data.Maybe允许您表明您将要返回某些内容(例如长度在范围内)或什么都没有(长度不在范围内)。调用 getChar 的函数然后可以决定如何处理事物。 Data.Either提供了一种返回带有错误的错误消息的方法。据我所见(我绝不是专家)异常在 Haskell 中很少使用,而选择类型如 EitherMaybe更常用。

现在在调用它的代码中,您可以使用模式匹配来查看发生了什么,例如
main :: IO ()
main = do
x <- getLine
let z = getChar' 5 x
case z of
(Just z) -> print $ "The 5th character is " ++ show z
Nothing -> print $ "The 5th character is out of range"

关于list - 在 Haskell 中索引列表时捕获异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6187573/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com