繁体   English   中英

为什么文件夹的这种大小写表达式不起作用?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM