这个程序会在列表x的末尾添加n个0。
fillZeros "100" 1 "0100" fillZeros "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 时都会出现此错误。
这个程序会在列表x的末尾添加n个0。
fillZeros "100" 1 "0100" fillZeros "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 时都会出现此错误。
fillZeros
(大写Z
)指定了签名,但你的实现是针对函数fillzeros
(小写z
)。(0: fillzeros (x:xs) a-1)
没有意义:这会被解析为(0: (fillzeros (x:xs) a) - 1)
,所以你从递归调用中减去了1,而且0
不是一个字符,因此你不能在函数中使用它。x
进行匹配,否则fillzeros "" 15
将引发错误,因为空字符串与(x:xs)
不匹配。fillzeros :: (Eq a, Num a) => [Char] -> a -> [Char]
fillzeros x 0 = x
fillzeros x a = (<b>'0'</b> : fillzeros x <b>(</b>a-1<b>)</b>)
Z
,而你函数的定义有一个小写的z
。你应该修改其中一个,使得函数签名中的名称与函数体中的名称相同。 - Willem Van Onsem(0:fillzeros (x:xs) a-1)
没有意义,因为你正在返回一个字符串,0
不能是一个元素。 - Willem Van Onsem