私は次のコードを持っています:
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)等差数列 '0 .. 9'から生じる(Enum [Int])のインスタンスはありません
2)リテラル「0」から生じる(Num [Int])のインスタンスはありません
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にある種のフィルターを追加します。 ]、したがって範囲を縮小します。