【发布时间】:2013-01-08 20:27:53
【问题描述】:
考虑 - fun A() 调用 fun B() 反之亦然,我在 B() 之前实现 A(),如下所示:
fun A() =
B() ;
fun B() =
A() ;
在这种情况下,SML/NJ 解释器会提示 -
Error: unbound variable or c onstructor: B
我该如何解决这个问题?也许像前向声明?
(让它导致无限循环)
【问题讨论】:
考虑 - fun A() 调用 fun B() 反之亦然,我在 B() 之前实现 A(),如下所示:
fun A() =
B() ;
fun B() =
A() ;
在这种情况下,SML/NJ 解释器会提示 -
Error: unbound variable or c onstructor: B
我该如何解决这个问题?也许像前向声明?
(让它导致无限循环)
【问题讨论】:
您可以使用and 关键字来声明相互递归的函数。
fun A () = B ()
and B () = A ()
您还可以使用相同的关键字来创建相互递归的数据类型。
注意,通常你会用小写的第一个字母来写函数名:
fun a () = b ()
and b () = a ()
这有助于区分函数和值构造函数。
【讨论】:
没有必要为此使用 let 绑定。您也可以在顶层声明它:
fun a () = b ()
and b () = a ()
【讨论】: