如何传递递归函数的值而不是定义

时间:2017-02-21 03:12:27

标签: ocaml

我有这个非常简单的递归函数,可以从char列表中为树添加分支。

type tree = Node of bool ref * (char * tree) list ref

let rec create_branch lc = function
    [] -> Node(ref true, ref[])
    | x :: l -> Node(ref false, ref [(x, (create_branch l))])

我希望这会创建一个只包含一个分支的树,它会有一堆带有char转换的“false”节点,直到最后一个节点为真。

但是我收到了一个错误:

错误:此表达式具有类型(char *(char list - > tree))list ref        但是表达式是期望的类型(char * tree)list ref        键入字符列表 - >树与类型树不兼容

我想我明白这意味着我的递归调用似乎由于某种原因被传递为对实际函数的引用(因此是(char list - > tree)),而不是它的返回值,简直就是一棵树。

我想知道我做错了什么?

1 个答案:

答案 0 :(得分:3)

function关键字创建一个lambda表达式,您可以在其中执行多个模式匹配子句。

你编写的函数有两个参数,lc和一个模式匹配的参数。

您可以将function替换为match lc with,或删除lc进行修复。

这是同样的问题 Ocaml: This expression has type 'a list * 'a list -> bool but an expression was expected of type bool,但我知道搜索这样的错误可能很困难。