繁体   English   中英

f# 生成下一个值 function

[英]f# generating a next value function

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

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))

尝试在 function 的签名中添加类型注释。 它的返回类型取决于l的长度。 您可以通过定义递归类型来解决它:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM