微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用递归函数将元素插入列表,然后在 Ocaml 中打印

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

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

$1,525
$1,525.25

一个例子:

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

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

解决方法

如果你想打印 [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();; 

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

,

您所说的“正确方式”是什么意思不是很清楚。功能性的“正确方法”是不使用引用。效率“正确的方法”是预先添加而不是附加。

另一种从 user4624500 的回答中得到启发的直接构建列表的方法可能是:

let rec f = function 
  | 0 -> [0]
  | n -> n :: f (n-1)

(注意:这不是尾递归,并且会以负数丑陋失败...)

然后下面的表达式调用前面的函数来构建列表,然后打印结果(为了可读性而添加换行符):

let my_list = f 10 in
List.iter (fun n -> print_int n; print_newline ()) my_list

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。