私はリストを合計するためにf#クエリを使用する必要があるいくつかのコードに取り組んでいます。 F#の基礎に取り組んでいる人のためf#式の方程式
は、ここに便利なリンクです:https://learnxinyminutes.com/docs/fsharp/
これまでのところ、私は5つの数字の二乗和のための文を出力するコードを持っています。
これまでのところ、3000が各リストの2乗の合計として正しく表示されます。クエリには「numbers」が使用されます。
let square x = x * x
let numbers = [10.0; 20.0; 30.0; 40.0]
let sumOfSquare2 =
[10.0; 20.0; 30.0; 40.0]
|> List.map square
|> List.sum
printfn "Sum of square: %A" (sumOfSquare2)
let sumOfSquare =
List.sum (List.map square [10.0; 20.0; 30.0; 40.0])
printfn "Sum of square: %A" (sumOfSquare)
現時点では、クエリの後に「四角形」関数を正しく使用する方法が少し残っています。
// A query expression.
let query1 =
query {
for number in numbers do
select (number)
}
|> square query
printfn "Query sum of squares: %A" (query1)
これを正しく表示するにはどうすればよいですか? 'query'自体は動作しますが(照会でprintfnを使用しているとき)、照会のために平方関数をパイプラインしようとするとコンパイルされません。
のlet Query1を|> Seq.iter(楽しいE - >四角(E))|> Seq.sumはコンパイルエラーを引き起こします。私は自分の問題にこれをどのように適用するのか本当に分かりません。 リンクした記事を読んでいます。それは私の質問の結果に私の二乗関数を適用している問題を解決しません。 – EidahageFeroe
私はあなたの解決方法を理解しました。これにより、コンパイルエラーが発生します。 のlet Query1を= クエリ{数の数の 行う 選択(数) } |> Seq.iter(楽しいE - >四角(クエリ))|> Seq.sum – EidahageFeroe
あなたはの機能の署名を見れば'Seq.iter'を実行すると、ユニットが返されることがわかります。したがって、一般的に副作用(例えば、スクリーンへの印刷)に使用されます。実際には 'Seq.map'と' Seq.sum'が必要です。クエリは怠惰なseqを返すので、評価を強制的にArrayに渡したいのであれば、 '|> Seq.toList' – s952163