首页 > 解决方案 > 如何使用递归函数将元素插入列表,然后在 Ocaml 中打印

问题描述

将项目附加到递归函数内的列表的正确方法是什么?

let () =
    let rec main m l acc =
        if (acc = 3) then
            acc
        else
            if (m = 1) then
                l := 1 :: !l
                main (m - 1) l
            else if (m = 2) then
                l := 2 :: !l
                main (m - 1) l
            else
                l := m :: !l
                main (m - 1) l

    in l = ref []
    let main 10 l 0
    List.iter (fun l -> List.iter print_int l) l

另一个例子:

let () =
    let rec main m =
        if (m = 3) then m
        else
            l := m :: !l;
            main (m + 1) l

    in l = ref []
    let main 0 l
    List.iter (fun l -> List.iter print_int l) l

我想将一个值附加到函数内的列表中,然后打印列表的元素。

标签: recursionocaml

解决方案


如果要打印 [1;2;...;10]:

let () =
    let rec main m l =
        if (m = 0) then
            !l
        else begin
            l := m :: !l;
            main (m - 1) l
            end

    in 
    let l = ref [] in
    List.iter print_int (main 10 l); print_newline();;  

或者没有参考更好

let () =
    let rec main m l =
        if (m = 0) then
            l
        else 
            main (m - 1) (m::l)
    in 
    List.iter print_int (main 10 []); print_newline();; 

但我不确定你想做什么......


推荐阅读