fsomaq = x
x = sum (takeWhile (<x) [m | m <- [n*n | n <- [1..]]])
ここで私がやろうとしているのは、制限x
を取得してから、すべての数値を2乗してから、これらすべてを合計することです。
何か案が ?エラーメッセージ:
Couldn't match expected type ‘Integer -> t’ with actual type ‘Integer’ •
The function ‘fsomaq’ is applied to one argument, but its type ‘Integer’ has none In the expression: fsomaq 10 In an equation for ‘it’: it = fsomaq 10 • Relevant bindings include it :: t (bound at :16:1)
私が正しく理解していれば、数値を入力として受け取り、1からその数値まで(およびその数値を含む)の平方和を返す関数を定義する必要があります。このような関数は次のように記述できます。
fsomaq :: (Num a, Enum a) => a -> a
fsomaq x = sum [n*n | n <- [1..x] ]
したがって、ここでfsomaq
パラメーターを入力として受け取る関数を定義するx
と、結果は次のsum [ n*n | n <- [1..x] ]
ようになります。リスト内包表記を記述して、から(およびを含む)n
までの範囲の平方のリストを生成し、平方()を出力します。次に、そのリストの合計を計算します。1
x
n*n
署名をとして定義することにより、(Num a, Enum a) => a -> a
列挙可能な任意のタイプの数値を使用できます。
例えば:
Prelude> fsomaq 0
0
Prelude> fsomaq 1
1
Prelude> fsomaq 2
5
Prelude> fsomaq 4
30
Prelude> fsomaq 8
204
Prelude> fsomaq 1425
965562425
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加