为什么List.append前置而不是追加

Kal*_*exx 0 f#

我觉得我在这里误解了一些东西.

假设我有数字1,2,3和4,我想要添加5和6.常识告诉我List.append它,但当我尝试时,我得到:

[1; 2; 3; 4] |> List.append [5; 6] ;;

val it:int list = [5; 6; 1; 2; 3; 4]

为什么它会将值添加到我的列表中而不是附加它们?

Gus*_*Gus 16

它并不是真正的前期.您正在通过使用正向管道运算符更改参数显示的顺序,在这种情况下会反转顺序,但如果您在不更改顺序的情况下编写函数,则更有意义:

List.append [1;2;3;4] [5;6]   // [1;2;3;4;5;6]
Run Code Online (Sandbox Code Playgroud)

请注意,这与Array.append和一致Seq.append.它也与字符串连接运算符作为函数一致(+).

前向运算符将最后一个参数"移动"到表达式的开头,在某些情况下可能需要(管道),但在其他情况下可能会令人困惑,例如,(/)如果将分区用作函数的一部分,则将其作为函数的一部分.管道,带有前进操作员:

5 |> (/) 10
Run Code Online (Sandbox Code Playgroud)

它评估到10 / 5但乍一看你可能会得到一个错误的印象,它会做5除以10.


Dan*_*iel 5

我认为这是一个奇怪的功能,因为args的顺序不适用于管道.相反,订单反映了结果列表,即List.append [1;2] [3;4]收益率[1;2;3;4].


Lee*_*Lee 5

这被解析为

[1;2;3;4] |> (List.append [5;6])
Run Code Online (Sandbox Code Playgroud)

List.append [5;6]返回一个int list -> int list将输入附加到列表的函数[5;6].然后,您将列表[1;2;3;4]应用于此功能.