Haskell补零程序
该程序将 n 个零添加到列表 x 示例中
填充零 "100" 1 "0100" 填充零 "10" 4 "000010"
我的代码:
fillZeros :: (Eq a, Num a) => [Char] -> a -> [Char]
fillzeros x 0 = x
fillzeros (x:xs) a = (0:fillzeros (x:xs) a-1)
类型签名中缺少变量“fillZeros”的绑定,每次重新加载时都会出现此错误:r
回答
您遇到的第一个问题是您为函数指定了签名(使用大写),但您的实现是针对函数(使用小写)。fillZerosZfillzerosz
此外,使用没有任何意义(0: fillzeros (x:xs) a-1):这被解析为(0: (fillzeros (x:xs) a) - 1),因此您从递归调用中减去一个,而且0不是 a,Char因此您不能在您的函数中使用它。
为了模式匹配,最好用 匹配x,否则fillzeros "" 15会报错,因为空字符串与 不匹配(x:xs)。
因此,您可以通过以下方式实现:
fillzeros :: (Eq a, Num a) => [Char] -> a -> [Char]
fillzeros x 0 = x
fillzeros x a = ('0' : fillzeros x (a-1))