我正在编写一些需要使用 f# 查询对列表求和的代码。
对于从事 f# 基础知识的任何人,这里有一个方便的链接:https://learnxinyminutes.com/docs/fsharp/
到目前为止,我的代码可以打印 5 个数字的平方和的语句。
到目前为止,这正确地将 3000 显示为每个列表的平方和。 “数字”将用于查询。
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)
目前,我对如何在查询后正确使用“square”函数有些困惑。
// A query expression.
let query1 =
query {
for number in numbers do
select (number)
}
|> square query
printfn "Query sum of squares: %A" (query1)
那么我该如何正确呈现呢? “query”本身有效(在查询中使用 printfn 时),但在尝试将 square 函数管道化以进行查询时,它无法编译。
最佳答案
它基本上与您在 list
中使用的代码相同,但是由于查询返回一个 seq
,因此使用 Seq.map
而不是List.map
:
// A query expression.
let query1 =
query {
for number in numbers do
select (number)
}
|> Seq.map square
printfn "Query sum of squares: %A" (query1)
请注意,您的查询不会转换任何内容,但我认为您确实喜欢这个例子。
关于f# 用方程式查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42731139/