2011-04-04 149 views
2

所以我有一個遞歸函數,它需要2個整數和一個out_channel,並基本上打印行(a,a + 1)。它應該這樣做,直到a的值等於b。即,如果A = 1,B = 5Ocaml:再次調用遞歸函數

線(1,2) 線(2,3) ...線(4,5)

> let rec print_line (out:out_channel)(a:int)(b:int) : unit = 
    if (a < b) then output_string out ("line("^string_of_int(a)^","^string_of_int(a+1)^")\n") 
> ;; 

我想使它遞歸其中它不斷打印行(a,a + 1),直到a不再小於b。我到底怎麼稱呼它呢?

任何幫助,將不勝感激。

回答

5

所以:首先檢查是否a >= b在這種情況下你已經完成並且可以返回()。否則,打印一行(按照你的方式),然後遞歸調用你的函數,增加a。所以乾脆:

let rec print_line (out:out_channel)(a:int)(b:int) : unit = 
    if a >= b then 
    () 
    else (
    output_string out ("line("^string_of_int(a)^","^string_of_int(a+1)^")\n"); 
    print_line out (a + 1) b 
) 
+0

需要注意的是,你可以實際使用'讓REC print_line了B ='作爲第一線,爲ocaml的編譯器是足夠聰明,知道什麼是B的類型和OUT。 – subsub 2011-04-06 13:15:49