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# 获取数组、列表或序列的第N个元素的不同参数顺序_F#_Pipeline - Fatal编程技术网

F# 获取数组、列表或序列的第N个元素的不同参数顺序

F# 获取数组、列表或序列的第N个元素的不同参数顺序,f#,pipeline,F#,Pipeline,在获取数组、列表或Seq的第N个元素的函数中,是否有充分的理由使用不同的参数顺序: Array.get source index List .nth source index Seq .nth index source 我想使用管道操作器,而且似乎只有使用Seq才有可能: s |> Seq.nth n 有没有办法用数组或列表来表示相同的符号?我想没有什么好的理由来定义数组。用这种方式获取和列表。n。考虑到管道化在F#中非常常见,它们的定义应该使源参数排在最后 在List.nth的情

在获取数组、列表或Seq的第N个元素的函数中,是否有充分的理由使用不同的参数顺序:

Array.get source index
List .nth source index
Seq  .nth index  source
我想使用管道操作器,而且似乎只有使用Seq才有可能:

s |> Seq.nth n

有没有办法用数组或列表来表示相同的符号?

我想没有什么好的理由来定义
数组。用这种方式获取
列表。n
。考虑到管道化在F#中非常常见,它们的定义应该使
参数排在最后

List.nth
的情况下,变化不大,因为您可以使用
Seq.nth
,时间复杂度仍然是
O(n)
,其中
n
是列表的长度:

[1..100] |> Seq.nth 10
在数组上使用
Seq.nth
不是一个好主意,因为会丢失随机访问。要保持
O(1)
数组的运行时间。获取
,您可以定义:

[<RequireQualifiedAccess>]
module Array =
    /// Get n-th element of an array in O(1) running time
    let inline nth index source = Array.get source index
您可以直接在上述功能上使用它:

[1..100] |> flip List.nth 10
[|1..100|] |> flip Array.get 10

只需使用反向管道操作符:

[1..1000] |> List.nth <| 42

[1..1000]|>List.nth f)既然Pad和bytebuster回答了你的最后一个问题,我将集中讨论为什么部分

这是基于我目前的知识,而不是历史事实


由于F#源于OCaml,而OCaml已经和但是F#使用|>进行自然流水线,并且,F#的作者切换为Seq。但很明显,为了向后兼容OCaml,他们并没有切换所有内容。

它确实起到了作用,但我不喜欢它的可读性——非常幽闭恐怖@PaulJurczak绝对是风格的问题。就我个人而言,我喜欢运算符,但它们在F#中自然有,因此在
flip
、扩展方法和
+1
not
defaultArg
之间进行选择,这使我习惯于使用
OCaml继承理论,这很有意义。
[1..1000] |> List.nth <| 42