Haskell无导入仅用模式匹配获取字符串空行索引的实现问题
原有代码问题
- 类型不匹配:你定义的
lineBr函数返回单个数值,不是列表,直接放到列表推导中遍历会触发编译错误,也不可能输出多个行号结果。 - 空行判断逻辑错误:仅判断两个连续
\n的情况,没有覆盖字符串为空、字符串以\n结尾的边界场景,也没有逐行判断当前行是否为空的逻辑。 - 计数逻辑错误:累计计数的逻辑只能返回一个数值,没有存储所有符合条件的空行号的逻辑。
符合要求的实现
无需导入任何库,仅用模式匹配实现的代码如下:
nLn :: Integral a => String -> [a] nLn s = go 1 0 s where -- 参数顺序:当前行号、当前行已读取的字符数、剩余待处理字符串 go currLine currLen [] | currLen == 0 = [currLine] | otherwise = [] go currLine currLen ('\n':rest) = (if currLen == 0 then [currLine] else []) ++ go (currLine + 1) 0 rest go currLine currLen (_:rest) = go currLine (currLen + 1) rest
验证结果
- 执行
nLn "This\n\nis an\nexample\n\n"输出[2,5,6],和示例要求一致 - 执行
nLn ""输出[1],和示例要求一致
内容的提问来源于stack exchange,提问作者helpmeplease
相关产品推荐
相关产品推荐

