1

考虑-fun A()调用fun B(),反之亦然,我A()之前实现B(),如下所示:

fun A() = 
  B() ; 

fun B() =
  A() ; 

在这种情况下,SML/NJ 解释器会提示 -

 Error: unbound variable or c onstructor: B

我该如何解决这个问题?也许像前向声明之类的东西?

(让它导致无限循环)

4

2 回答 2

4

您可以使用and关键字来声明相互递归的函数。

fun A () = B ()
and B () = A ()

您还可以使用相同的关键字来创建相互递归的数据类型。

注意,通常你会用小写的第一个字母写函数名:

fun a () = b ()
and b () = a ()

这有助于区分函数和值构造函数。

于 2013-01-08T12:21:00.847 回答
2

没有必要为此使用 let 绑定。您也可以在顶层声明它:

fun a () = b ()    
and b () = a ()
于 2013-01-08T12:20:46.207 回答