在APL中,可以使用位向量来选择另一个向量的元素; 这叫做压缩.例如,1 0 1/3 5 7将产生3 7.
在函数式编程中是否有一个可接受的术语,特别是F#?
这是我的F#程序:
let list1 = [|"Bob"; "Mary"; "Sue"|]
let list2 = [|1; 0; 1|]
[<EntryPoint>]
let main argv =
0 // return an integer exit code
Run Code Online (Sandbox Code Playgroud)
我想要做的是计算一个新的字符串[],它将是[|"Bob"; 苏"|]
如何在F#中做到这一点?
Array.zip list1 list2 // [|("Bob",1); ("Mary",0); ("Sue",1)|]
|> Array.filter (fun (_,x) -> x = 1) // [|("Bob", 1); ("Sue", 1)|]
|> Array.map fst // [|"Bob"; "Sue"|]
Run Code Online (Sandbox Code Playgroud)
管道运算符|>在语法上反转功能应用程序,即x |> f相当于f x.如在另一种答案提到的,替换Array用Seq,以避免中间阵列的构造.
我希望你会发现F#中缺少许多APL原语.列表和序列,许多可以通过原语从串在一起来构建Seq,Array或List模块,如上述.作为参考,这里是一个概述了的Seq模块.