【问题标题】:Debugging this OCaml code? Functional Programming调试这个 OCaml 代码?函数式编程
【发布时间】:2020-06-04 07:58:00
【问题描述】:
let rec fold_inorder f acc t =
match t with
| Leaf -> acc
| Node (l, n, r) -> f (fold_inorder f acc l) (f n (fold_inorder f acc r))

我正在尝试按如下方式打印树的折叠:

fold_inorder (fun acc x -> acc @ [x]) [] (Node (Node (Leaf,1,Leaf), 2, Node (Leaf,3,Leaf))) = [1;2;3]

我收到一条错误消息,提示我的 [x] 是

This expression has type 'a list
       but an expression was expected of type 'a
       The type variable 'a occurs inside 'a list

我真的不知道从这里做什么。任何人都可以将我推向正确的方向吗?

【问题讨论】:

    标签: functional-programming ocaml


    【解决方案1】:

    在您对fold_inorder 的定义中,您希望f 具有什么类型?

    如果我看一下这个电话:

    f n (fold_inorder f acc r)
    

    看来f 的第一个参数是来自树节点的新值,第二个参数是累积值。

    但是在您的测试调用中,您可以像这样定义f

    (fun acc x -> ...)
    

    这表明第一个参数是累积值,第二个参数是来自树节点的新值。

    【讨论】:

      猜你喜欢
      • 2020-07-15
      • 1970-01-01
      • 2012-02-17
      • 2011-02-11
      • 1970-01-01
      • 2016-07-12
      • 2011-06-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多