Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
考虑-fun A()调用fun B(),反之亦然,我A()之前实现B(),如下所示:
fun A()
fun B()
A()
B()
fun A() = B() ; fun B() = A() ;
在这种情况下,SML/NJ 解释器会提示 -
Error: unbound variable or c onstructor: B
我该如何解决这个问题?也许像前向声明之类的东西?
(让它导致无限循环)
您可以使用and关键字来声明相互递归的函数。
and
fun A () = B () and B () = A ()
您还可以使用相同的关键字来创建相互递归的数据类型。
注意,通常你会用小写的第一个字母写函数名:
fun a () = b () and b () = a ()
这有助于区分函数和值构造函数。
没有必要为此使用 let 绑定。您也可以在顶层声明它: