我是F#初学者,在学习“递归值”时遇到了这个问题。
type Type =
| N of int * Type
| E
let rec a = N(2, b)
and b = N(3, E)
a |> printfn "%A"
Run Code Online (Sandbox Code Playgroud)
我希望输出是:
N(2, N(3, E))
Run Code Online (Sandbox Code Playgroud)
但实际输出为:
N (2,null)
Run Code Online (Sandbox Code Playgroud)
Fyo*_*kin 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
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
135 次 |
最近记录: |