2014-05-07 141 views
0

我有兩個功能:如何遞歸調用2個函數?

let fn2 = 
    if "something happend" then 
    fn1 

let rec fn1 = 
    if "something" then 
    fn2 

這只是一個例子,我想做的事情。有沒有任何想法如何做到這一點?

或者我應該只發送2.函數作爲參數的1.函數?

回答

6

您需要使用let rec ... and ...

let rec fn1 x = 
    if x = "something" then 
     fn2 x 
and fn2 x = 
    if x = "something else" then 
     fn1 x 
+0

哇我不知道,謝謝kvb – Racooon

0

您也可以嵌套包裝的功能並創建兩個高階函數中接受一個函數作爲參數,並將其應用。

這可能比不上。像:

let fn2 fn = 
    if "something happend" then 
    fn fn2 

let rec fn1 fn = 
    if "something" then 
    fn fn1 

你可以叫比調用你的函數是這樣的:

let result = fn1 fn2

如果你希望你的功能更明確的可以寫出來,例如像:

let rec fn2 (fn:unit->unit) : unit = 
    if "something happend" then 
    fn fn2 

let rec fn1 (fn:unit->unit) : unit = 
    if "something" then 
    fn fn1 

但我認爲kvb的回答是他們更好的方式,因爲它更符合標準和可讀性。