SML / NJ中的前向声明(呼叫B,B呼叫A)

时间:2013-01-08 11:12:07

标签: sml smlnj

考虑 - fun A()致电fun B(),反之亦然,我在A()之前实施B(),如下所示:

fun A() = 
  B() ; 

fun B() =
  A() ; 

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

 Error: unbound variable or c onstructor: B

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

(留下它导致无限循环)

2 个答案:

答案 0 :(得分:3)

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

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

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

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

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

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

答案 1 :(得分:2)

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

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