为什么递归值为null?

时间:2019-04-29 16:16:33

标签: f#

我是F#初学者,在学习“递归值”时遇到了这个问题。

type Type = 
    | N of int * Type
    | E

let rec a = N(2, b)
and b = N(3, E)

a |> printfn "%A"

期望,输出为:

N(2, N(3, E))

但实际输出是:

N (2,null)

output

1 个答案:

答案 0 :(得分:10)

这实际上是F#编译器中的错误,在这里提交:https://github.com/fsharp/fsharp/issues/847

没有迹象表明何时(或是否)将其修复。

对于您的特定示例,我建议您简单地删除rec修饰符:由于值实际上不是递归的,因此不需要它。这将使该错误消失。

对于更一般的情况,您可以创建一个相互递归函数的系统进行初始化,也可以创建一个嵌套的let块。例如,这应该起作用:

let a, b =
    let rec a = N(2, b)
    and b = N(3, E)
    a, b
相关问题