Haskell中如何拼接整数列表并输出为连续字符串?
核心错误说明
- 基础类型认知错误:整数列表
(x:xs)的类型为[Int],不是Int - 函数误用:
chr是将整数作为ASCII编码转对应字符,输入4得到的是ASCII控制字符,不是字符'4' - 运算符类型不匹配:
++仅支持两个列表拼接,chr x返回Char类型,不能直接和String(即[Char])用++拼接 - 缺少递归终止条件:没有定义空列表的处理逻辑,递归遍历到列表末尾时会触发模式匹配错误
正确实现
递归手写版本(适配所有整数)
如果输入整数可能是多位数(例如[12,3,45]输出"12345"),使用show函数做转换:
printL :: [Int] -> String printL [] = "" printL (x:xs) = show x ++ printL xs
单数字输入优化版本
如果确认输入列表中的整数都在0-9范围内,可以用intToDigit减少转换开销:
import Data.Char (intToDigit) printL :: [Int] -> String printL [] = "" printL (x:xs) = intToDigit x : printL xs
极简高阶函数版本
直接使用标准库组合函数实现,不需要手写递归:
printL :: [Int] -> String printL = concatMap show
调用printL [4,3,4]均会返回"434",符合需求。
内容的提问来源于stack exchange,提问作者Wouter
相关产品推荐
相关产品推荐

