我正在尝试创建一个自定义展开函数,该函数返回其最后一个累加器值,例如:
val unfold' : generator:('State -> ('T * 'State) option) -> state:'State -> 'T list * 'State
我设法做到了以下几点:
let unfold' generator state =
let rec loop resultList state =
match generator state with
| Some (value, state) -> loop (value :: resultList) state
| None -> (List.rev resultList), state
loop [] state
但是我想避免List.rev
生成结果列表并已经以正确的顺序生成它。我想有必要使用延续来构建列表,但我对函数式编程还很陌生,还没有设法将我的思想包裹在延续上;我能想象的所有替代方法都会将累加器放在结果列表中,或者不允许它由函数返回。
有没有办法做到这一点?
由于这是一个个人学习练习,我更喜欢一个解释如何做的答案,而不是简单地给出完整的代码。