如何创建一个函数,将数字添加到数组中的每个值?

Jor*_*ens 1 f# functional-programming

我是 F# 新手,我正在尝试创建一个名为 sumUp 的函数,该函数将 2 个值相加,例如 1+2。但我希望它在数组上工作,我尝试了您在代码片段中看到的代码,但它似乎不起作用,我做错了什么,为什么这不起作用?

let sumUp int1 int2 = int1 + int2

let numbers = [1;2;3]

numbers |> Seq.map (sumUp 4)
Run Code Online (Sandbox Code Playgroud)

我的预期结果是 [5,6,7] 但我根本没有得到任何结果。

这是我的输出:

- let sumUp int1 int2 = int1 + int2
-
- let numbers = [1;2;3]
-
- let result = numbers |> Seq.map (sumUp 4)
- ;;
val sumUp: int1: int -> int2: int -> int
val numbers: int list = [1; 2; 3]
val result: seq<int>
Run Code Online (Sandbox Code Playgroud)

bri*_*rns 5

你的代码是正确的。唯一的问题是这Seq.map是一个惰性函数,因此 的值result只是seq<int>直到您执行某些操作来枚举序列为止。您可以使用 来执行此操作printfn,例如:

> let result = numbers |> Seq.map (sumUp 4);;
val result: seq<int>

> printfn "%A" result;;
seq [5; 6; 7]
Run Code Online (Sandbox Code Playgroud)

或者,您可以使用List.map而不是Seq.map首先避免延迟计算:

> let result = numbers |> List.map (sumUp 4);;
val result: int list = [5; 6; 7]
Run Code Online (Sandbox Code Playgroud)

请注意,您的输入 ( [1;2;3]) 是一个列表,而不是数组。如果您想使用数组代替,请尝试以下操作:

> let numbers = [|1;2;3|];;
val numbers: int[] = [|1; 2; 3|]

> let result = numbers |> Array.map (sumUp 4);;
val result: int[] = [|5; 6; 7|]
Run Code Online (Sandbox Code Playgroud)