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)
你的代码是正确的。唯一的问题是这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)