【问题标题】:Forward declaration in SML/NJ (A call B , B call A)SML/NJ 中的转发声明(A 呼叫 B,B 呼叫 A)
【发布时间】:2013-01-08 20:27:53
【问题描述】:

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

fun A() = 
  B() ; 

fun B() =
  A() ; 

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

 Error: unbound variable or c onstructor: B

我该如何解决这个问题?也许像前向声明

(让它导致无限循环)

【问题讨论】:

    标签: sml smlnj


    【解决方案1】:

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

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

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

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

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

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-11-21
        • 2021-03-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-11-28
        • 1970-01-01
        相关资源
        最近更新 更多