我可以在F#中定义一个简单的列表,如下所示,并使用以下代码对其进行迭代:
let ar = [0;1;2;3]
ar |> Seq.iter (fun x -> printfn "Ar: %A" x)
现在考虑如下嵌套序列:
let ar1 = [1;2;3;4]
let ar2 = [5;6;7;8]
let nested_array = [ar1; ar2]
如何对此进行迭代 - 以下代码会出错:
'lambda表达式中的意外中缀运算符'
我在这里要做的是迭代外部序列并将其转发到第二个迭代器,然后让我访问内部数组的内容。
nested_array |>
Seq.iter (fun x -> |>
Seq.iter (fun y ->
printfn "Ar: %A" y))
我在这里缺少什么 - 我怀疑语法问题或(更严重/可能)缺乏F#/ FP理解。
答案 0 :(得分:6)
您没有使用变量x
。尝试
nested_array |> Seq.iter (fun x -> x |> Seq.iter (fun y -> printfn "Ar: %A" y))
或(完全不使用x
)
nested_array |> Seq.iter (Seq.iter (fun y -> printfn "Ar: %A" y))
或甚至(也取消y
)
nested_array |> Seq.iter (Seq.iter (printfn "Ar: %A"))
答案 1 :(得分:3)
我不喜欢使用Seq.iter
函数,因为它不在较大的处理管道中。另一种方法是使用嵌套的for
:
for nested in nested_array do
for y in nested do printfn "Ar: %A" y
尽管如此,使用部分功能应用程序(由kvb发布)确实很好,所以这只是个人偏好的问题 - 以及您希望阅读它的人。我想我的方法不是让源代码“更聪明”,如果它没有给你任何明确的价值。
答案 2 :(得分:1)
试试这个。
nested_array |> Seq.iter(有趣的x - > x |> Seq.iter(printfn“%d”))