能否编写Haskell函数将字符串转为列表或元组?
当然可行!不管是转成字符串列表还是固定长度的四元组,Haskell都能轻松做到,我给你分别说明实现方式:
1. 转换为字符串列表
Haskell的标准库自带了一个完美适配这个需求的函数words——它会自动把以空格分隔的字符串拆分成字符串列表,完全不需要自己造轮子:
splitToList :: String -> [String] splitToList = words
调用这个函数测试一下:
splitToList "aaa bbb ccc dddd" -- 输出 ["aaa", "bbb", "ccc", "dddd"]
2. 转换为四元素元组
元组和列表不同,它的长度是编译时固定的,所以我们需要专门处理恰好包含四个空格分隔元素的输入场景。这里有两种实现方式:
基础版(出错时抛出异常)
先通过words把字符串转成列表,再用模式匹配解构出四个元素:
splitToTuple :: String -> (String, String, String, String) splitToTuple s = case words s of [a, b, c, d] -> (a, b, c, d) _ -> error "输入必须是恰好四个空格分隔的字符串!"
安全版(用Maybe处理错误)
如果不想因为输入不符合要求直接崩溃,可以用Maybe类型来优雅处理错误:
splitToTupleSafe :: String -> Maybe (String, String, String, String) splitToTupleSafe s = case words s of [a, b, c, d] -> Just (a, b, c, d) _ -> Nothing
调用安全版的效果:
splitToTupleSafe "aaa bbb ccc dddd" -- 输出 Just ("aaa", "bbb", "ccc", "dddd") splitToTupleSafe "aaa bbb" -- 输出 Nothing
内容的提问来源于stack exchange,提问作者Riccardo Monterisi
相关产品推荐
相关产品推荐

