首页 > 解决方案 > f# 生成下一个值函数

问题描述

给定一个列表 [1, 2] 我正在尝试创建一个匿名函数,该函数生成一个元组(下一个值 * 一个生成下一个值的函数)......类似于

f = createFunc([1; 2])
(v1, f1)  = f()    //v1 = Some 1
(v2, f2)  = f1()   //v2 = Some 2
(v3, f3)  = f2()   //v3 = None

在 Elixir 中我可以很容易地做到这一点,但在 F# 中我的头撞到了墙上。任何指点都感激不尽。到目前为止,我的尝试看起来像:

let top_and_tail (l: list<'a>): (Option<'a> * list<'a>) = 
    match l with
        | [] -> (None, [])
        | h :: t -> ((Some h), t)


let rec createFun l = 
    fun() -> 
        let (h, t) = top_and_tail(l)
        (h, createFun(t))

标签: recursionf#generator

解决方案


尝试将类型注释添加到函数的签名中。它的返回类型取决于l. 您可以通过定义递归类型来解决它:

data Ret a = 
| End of a
| KeepGoing of a * (unit -> Ret a)

推荐阅读