为新秀问题道歉.我试图将我的心理范式从程序性转变为功能性.
例如,假设我有一个我要打印的名称列表,如"John,Paul,George和Ringo".但是这段代码不满足:
let names = [ "John"; "Paul"; "George"; "Ringo" ]
names |> Seq.iter (fun s -> printf "%s, " s)
Run Code Online (Sandbox Code Playgroud)
我的程序本能是寻找一种方法来将谓词暗示为lambda,以便它可以在","或","和"."之间分支,这取决于我们在迭代序列的位置.我认为这是错的,但我感觉周围的事情是正确的.
将序列分成几部分会更好吗?
在这种情况下,似乎我们希望将序列拆分成对应于不同定界符行为的部分.我们想在最后拆分它,所以我们不能使用Seq.但我们可以使用List.splitAt.
let start, ending = List.splitAt (names.Length - 1) names
let penultimate, last = List.splitAt 1 ending
start |> Seq.iter (fun s -> printf "%s, " s)
penultimate |> Seq.iter (fun s -> printf "%s, and " s)
last |> Seq.iter (fun s -> printf "%s. " s)
Run Code Online (Sandbox Code Playgroud)
这是一种正义的做法吗?有没有一个我忽略的更好的解决方案?我在思考正确的方向吗?