我试图缓存无限三角形数序列的结果。
let triCalc n = (n*(n+1))/2
let triNumC = 0 |> Seq.unfold (fun n -> Some((triCalc n, n+1))) |> Seq.cache但是,当我尝试缓存时,它似乎不像我所期望的那样工作。
let x = Seq.take 4 (triNumC)
let y = Seq.take 4 (triNumC)
printf "%A" x
printf "%A" y这个指纹
seq [0; 1; 3; 6]seq [0; 1; 3; 6]我的缓存不正确吗?打印的第二个序列不应该是第一个序列的延续吗?我不太清楚如何取得进展。
发布于 2020-05-24 14:32:50
如果要继续,则需要跳过。序列保持不变
let y = triNumC
|> Seq.skip 4
|> Seq.take 4缓存是可以的。缓存的好处是,当计算y时,从第5个项开始,因为前4个已经缓存。
https://stackoverflow.com/questions/61986617
复制相似问题