我是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)
答案 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