私は関数魔女が命令型のスタイルで書かれており、それをより堅牢な関数型アプローチに変換する方法について頭を悩ませています。
この関数は一連の文字列を受け取り、各タプルが入力からの 2,7,12,.. および 5,10,15,.. 項目で構成される一連のタプルを返します。
例:
入力 = { "Lorem", "ipsum", "dolor", "set", "amet", "consectetuer", "adipiscing", "elit", "Aenean", "commodo", "ligula", "eget" 、「ドロール」、「アエネアン」、「マッサ」}
出力 = { ("ipsum", "amet"), ("adipiscing", "commodo"), ("eget", "massa") }
let convert (input : seq<string>) : seq<(string * string)> =
let enum = input.GetEnumerator()
let index = ref 0
let first = ref ""
let second = ref ""
seq {
while enum.MoveNext() do
let modIndex = !index % 5
index := !index + 1
if (modIndex % 2 = 0 && !first = "") then first := enum.Current
if (modIndex % 5 = 0 && !second = "") then second := enum.Current
if modIndex = 0 then
let result = (!first, !second)
first := ""
second := ""
yield result
}
出発点の助けやヒントをいただければ幸いです。