我已将代码从 python 翻译成 F#,但我希望使用更惯用的语法。我认为有两大障碍
- 性能差(考虑到
n
很大) - 不够强大的抽象
我拥有的当前(工作)代码是
let valuefolded =
System.Collections.Generic.List(
[0..( (n - (offset % input.Length) - 1) / input.Length)]
|> List.fold
(fun acc _ -> List.append acc input)
(input
|> List.skip (offset % input.Length)))
for repeat in [0..99] do
let mutable acc = 0
for i in ([0..(n-1)] |> List.rev) do
valuefolded.[i] <- Math.Abs(acc + valuefolded.[i]) % 10
acc <- valuefolded.[i]
(在我的笔记本电脑上使用实际数据,大约需要一分钟)
现在有两个可变的,我希望使不可变,如果它是可能的,如果它是有意义的。
- (
mutable acc
完成,见下文) System.Collections.Generic.List
包装器