Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
F# 为什么List.append是prepend而不是append_F# - Fatal编程技术网

F# 为什么List.append是prepend而不是append

F# 为什么List.append是prepend而不是append,f#,F#,我觉得我在这里误解了什么 假设我有数字1,2,3和4,我想加上5和6。常识告诉我要列出。附加它,但当我尝试时,我得到: [1;2;3;4]|>List.append[5;6] val-it:int-list=[5;6;1;2;3;4] 为什么要在列表中添加值而不是附加值?我认为这是一个奇怪的函数,因为args的顺序不适合管道。相反,顺序反映了结果列表,即,list.append[1;2][3;4]产生[1;2;3;4]它不是真正的预加。您正在使用forward pipe操作符更改参数的显示顺序,

我觉得我在这里误解了什么

假设我有数字1,2,3和4,我想加上5和6。常识告诉我要列出。附加它,但当我尝试时,我得到:

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

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


为什么要在列表中添加值而不是附加值?

我认为这是一个奇怪的函数,因为args的顺序不适合管道。相反,顺序反映了结果列表,即,
list.append[1;2][3;4]
产生
[1;2;3;4]

它不是真正的预加。您正在使用forward pipe操作符更改参数的显示顺序,在本例中,该操作符会反转顺序,但如果您在不更改顺序的情况下编写函数,则更有意义:

List.append [1;2;3;4] [5;6]   // [1;2;3;4;5;6]
请注意,这与
Array.append
Seq.append
是一致的。它还与字符串串联运算符一致,作为函数
(+)

正向运算符将最后一个参数“移动”到表达式的开头,在某些情况下可能需要(管道),但在其他情况下可能会混淆,例如,如果将除法用作管道的一部分,则使用正向运算符:

5 |> (/) 10

它的计算结果为
10/5
,但乍一看,您可能会产生错误的印象,认为它将5除以10

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

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

您感到困惑是完全正确的。从名字上看,这个函数的行为方式并不直观<代码>列表。追加实际上做了
(@)
做的事情:

List.append ['a'] ['b'] // ['a'; 'b']
['a'] @ ['b']           // ['a'; 'b']
(@) ['a'] ['b']         // ['a'; 'b']
如果我说“将a附加到b”,我希望结果是ba。以“将a添加到集合s”语句为例:它写为
set.add a s
。但是
List.append
交换参数的位置,这尤其危险,因为参数具有相同的类型。现在,我们可以将其理解为“附加a和b”,但即使在口语中,这也不是好的语法

因此,管道操作符读取的内容同样荒谬:
input |>append a
等于
append a input
,这在口语中被奇怪地翻译为“append input to a”


如果你问我,最好为这个选择一个不同的名称。

在管道中,只需将其视为类似于元素级列表扩展,其中“被附加的东西”像往常一样放在前面。可以说,它是预加的。在“将p前置到q”和“将p追加到q”之间,哪个将被写入
追加p q
,哪个将产生pq?