考虑- fun A()
调用fun B()
,反之亦然,我在B()
之前实现A()
,如下所示:
fun A() =
B() ;
fun B() =
A() ;
在这种情况下,SML/NJ解释器提示-
Error: unbound variable or c onstructor: B
如何解决这个问题?比如forward declaration?
(让它引起无限循环)
可以使用and
关键字来声明相互递归的函数。
fun A () = B ()
and B () = A ()
您还可以使用相同的关键字创建相互递归的数据类型。
注意,通常你会用小写字母来写函数名:
fun a () = b ()
and b () = a ()
这有助于区分函数和值构造函数
因此不需要使用let绑定。你也可以在顶层声明它:
fun a () = b ()
and b () = a ()