2012-11-19 44 views
2

一個遞歸函數我怎樣才能返回ML遞歸函數?返回在ML

據我所知,遞歸匿名函數不能返回,只有匿名函數 可以用作返回值(如果返回值是函數...)。

+0

你能改寫這個問題還是舉個例子?你爲什麼認爲你不能返回遞歸函數? –

回答

3

這會是你想知道的類的實例?

fun f n = 
    let 
     fun g k = 
     if k = n then [] else k :: g (k-1) 
    in 
     g 
    end 

您只能通過命名它使一個遞歸定義,但是這不是一個問題,因爲你可以在任何地方寫let表達。

更新更具體地回答評論:

fun f g = 
    let 
     fun h 0 = g 0 
     | h i = h (i-1) + g i 
    in 
     h 
    end 

(更有效的實現將使h尾遞歸。)

+0

我綁定實現函數f:(int-> int) - >(int-> int),它接收函數g作爲參數並返回h,其中:h = $ sum_ {i = 0}^{i} g(i)$我嘗試使用「let」,經過大量嘗試仍然無法正常工作。 – poli

+0

我更新了我的答案以包含該功能。 –