我有以下代码:
betaRest :: Int -> [Int] -> Int
betaRest n prevDigits | n == 0 = (length prevDigits)
| otherwise = (sum (map (betaRest (n - 1)) [0..9]))
betaFirst :: Int -> Int
betaFirst n | n == 0 = 0
| otherwise = (betaRest (n - 1) [1..9])
它给了我以下错误,我不知道为什么。
1) (Enum [Int]) 没有从算术序列 '0 .. 9' 产生的实例
2) (Num [Int]) 没有由文字“0”产生的实例
Haskell 是否认为用“..”运算符制作的东西是枚举?但是为什么下面 4 行(带有“[1..9]”)的行没有错误呢?
编辑:我想要代码做的是这样的(程序上):
int betaRest(int n, int[] prevDigits) {
if (n == 0) return prevDigits.length;
else {
sum = 0;
foreach prevDigit in prevDigits {
sum += betaRest(n - 1, [0..9]);
}
return sum;
}
}
int betaFirst(int n) {
if (n == 0) return 0;
else return betaRest(n - 1, [1..9]);
}
因此,betaFirst(1) == 9 和 betaFirst(2) == 90。是的,有人可能想建议一个公式来生成它,但我将在 [0..9 中添加某种过滤器],从而缩小范围。