[英]Why does this case expression for foldr does not work?
以下函数应采用“ 7-8-X”并转换为[7,8,10]
convertCharToInteger :: Char -> Integer
convertCharToInteger = (read::String->Integer) . (:[])
parseAsNumbers :: String -> [Integer]
parseAsNumbers xs = foldr (\x acc -> case x of '-' -> acc
'X' -> 10:acc
_ -> (convertCharToInteger x):acc
) [] xs
它给了我以下错误
表达式上下文中的模式语法:
\x acc
-> case x of {
'-' -> acc
'X' -> 10 : acc (...) } -> (convertCharToInteger x) : acc
您应该开始在新行上列出案例,并按如下方式对齐它们:
parseAsNumbers :: String -> [Integer]
parseAsNumbers xs = foldr (\x acc -> case x of
'-' -> acc
'X' -> 10:acc
_ -> (convertCharToInteger x):acc
) [] xs
模式应对齐,如下所示:
parseAsNumbers :: String -> [Integer]
parseAsNumbers xs = foldr (\x acc -> case x of '-' -> acc
'X' -> 10:acc
_ -> (convertCharToInteger x):acc) [] xs
同样,您可以使用read
而不是convertCharToInteger
。
parseAsNumbers :: String -> [Integer]
parseAsNumbers xs = foldr doit [] xs
where
doit = \x acc -> case x of
'-' -> acc
'X' -> (10:acc)
_ -> (read [x]:acc)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.