我有一个列表,希望能够逐个返回其中的元素。类似于从栈中弹出元素一样。例如:
let rnd = new System.Random()
let rnds = List.init 10 (fun _ -> rnd.Next(100))
List.iter (fun x -> printfn "%A"x ) rnds
不过,与其进行迭代,我想要的是在列表为空之前,每次返回一个整数。基本上就像这样:
List.head(rnds)
List.head(List.tail(rnds))
List.head(List.tail(List.tail(rnds)))
List.head(List.tail(List.tail(List.tail(List.tail(rnds)))))
很遗憾,我尝试使用递归或者更好的fold或scan解决方案都失败了。例如,这只返回列表(与map相同)。
let pop3 (rnds:int list) =
let rec pop3' rnds acc =
match rnds with
| head :: tail -> List.tail(tail)
| [] -> acc
pop3' [] rnds