2011-04-04 140 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