You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 11:06:08