2013-01-08 103 views
1

考慮 - fun A()呼叫fun B(),反之亦然,我B()之前實施A(),像這樣:正向聲明

fun A() = 
    B() ; 

fun B() = 
    A() ; 

在這種情況下,SML/NJ口譯員提示 -

Error: unbound variable or c onstructor: B 

我該如何解決?也許像正向聲明

(離開它,它會導致無限循環)

回答

2

沒有必要這樣來使用let此綁定。您可以在頂級聲明它還有:

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

可以使用and關鍵字來聲明相互遞歸函數。

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

您還使用相同的關鍵字來製作相互遞歸的數據類型。

注意,通常你會在小寫的首字母寫的函數名稱:

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

這有助於功能和價值構造區分。