考虑 - fun A()
致电fun B()
,反之亦然,我在A()
之前实施B()
,如下所示:
fun A() =
B() ;
fun B() =
A() ;
在这种情况下,SML / NJ解释器会提示 -
Error: unbound variable or c onstructor: B
我该如何解决这个问题?也许像前进声明这样的东西?
(留下它导致无限循环)
答案 0 :(得分:3)
您可以使用and
关键字来声明相互递归的函数。
fun A () = B ()
and B () = A ()
您还可以使用相同的关键字来生成相互递归的数据类型。
注意,通常你会用小写的第一个字母写函数名:
fun a () = b ()
and b () = a ()
这有助于区分函数和值构造函数。
答案 1 :(得分:2)
没有必要为此使用let绑定。您也可以在顶层声明它:
fun a () = b ()
and b () = a ()