2
次のコードでは、値のリストを示すmaxLen
が見つかりました。 maxLen
は変更可能な値です。どのように機能的な練習のためにそれを削除するには?コード内のグローバル可変変数を削除するにはどうすればよいですか?
let reject pos = // reject a given pos, the implementation is contrived
let s = [4; 9; 14] // Just an example, any value may be rejected
s |> List.exists (fun x -> x = pos)
let getLength pos = if pos % 3 = 0 then pos * 2 else pos
let mutable maxLen = 0
let getNewPosAndSetMaxLength pos len = // For each new position, check if the result of `getLenth pos` is larger than previous ones.
let direction = if len < 1 then -1 else 1
let newPos =
match [1..abs(len)] |> List.tryFind (fun i -> reject (pos + i * direction)) with
| Some p -> p
| None -> pos + len
let newLen = getLength newPos
maxLen <- if newLen > maxLen then newLen else maxLen
newPos
[<EntryPoint>]
let main argv =
let pos = 0
[3; -2; 6; 7]
|> List.iter (fun x ->
let pos = getNewPosAndSetMaxLength pos x
()
)
printfn "%d" maxLen
0 // return an integer exit code
あなたの代わりに ''リストの '' List.fold''を使用してみました.iter''と変更可能な? – Gustavo
ありがとう、私は 'getNewPosAndSetMaxLength'関数を変更してnewPosとlengthの両方を返す必要があると思います。 – ca9163d9