【问题标题】:I'm in trouble with writing reversing list function in OCaml我在 OCaml 中编写反转列表函数时遇到了麻烦
【发布时间】:2016-10-07 15:57:23
【问题描述】:
let rec reverse l =
  let s = ref [] in
    match l with
    | [] -> !s
    | hd::tl -> s := hd :: !s
                reverse tl

也许我在最后一个s := hd :: !s 部分遇到了麻烦。

我该如何解决这个问题??

【问题讨论】:

  • 这与 thisthisthis StackOverflow 问题重复或高度相似。此外,如果您在 google 上搜索“在 ocaml 中反转列表”,您将获得的无数其他资源已经回答了这个问题。看来您需要的是 OCaml 的基本编程帮助,而这个问题对未来的问题解决者几乎没有价值。

标签: list ocaml reverse


【解决方案1】:

一个问题是你有两个表达式:

s := hd :: !s
reverse tl

您需要将这些表达式连接成一个更大的表达式,按顺序计算它们。这样做的方法是使用;(分号)运算符:

s := hd :: !s ;
reverse tl

您的另一个问题是您在每个递归调用中都有不同的s。您需要为所有呼叫使用相同的s

这样做的基本布局是有一个定义s的外部函数和一个使用这个s完成工作的内部递归函数:

let outer_fun l =
    let s = ref [] in
    let rec inner_fun = ... in
    inner_fun l

(作为旁注,可能值得想办法在不使用参考的情况下做到这一点。学习编写纯函数是学习 OCaml 的最大好处之一,即使你没有继续学习一个函数式程序员。)

【讨论】:

    猜你喜欢
    • 2021-06-06
    • 1970-01-01
    • 2011-08-28
    • 1970-01-01
    • 2022-01-05
    • 1970-01-01
    • 2017-08-25
    • 2022-12-06
    • 2013-11-11
    相关资源
    最近更新 更多