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

  • 本文关键字:呼叫 声明 NJ SML sml smlnj
  • 更新时间 :
  • 英文 :


考虑- 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 ()

最新更新