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

Ocaml 如何传递递归函数的值而不是定义,ocaml,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列表向树添加一个分支

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))])
我希望这会创建一个只包含一个分支的树,其中会有一堆带有字符转换的“false”节点,直到最后一个节点为true

但我有一个错误:

错误:此表达式具有类型(char*(char list->tree))list ref 但表达式的类型应为(char*tree)list ref 类型char list->tree与类型tree不兼容

我想我理解这意味着,出于某种原因,我的递归调用似乎作为对实际函数的引用(因此是(char list->tree)),而不是它的返回值,它只是一个树


我想知道我做错了什么?

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

您编写的函数包含两个参数,
lc
,一个是模式匹配的参数

您可以将
功能
替换为
将lc与
匹配,或删除
lc
以修复它

这是同样的问题
,但我知道搜索这样的错误可能很困难。

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

您编写的函数包含两个参数,
lc
,一个是模式匹配的参数

您可以将
功能
替换为
将lc与
匹配,或删除
lc
以修复它

这是同样的问题
,但我知道搜索这样的错误可能很困难。

它成功了,或者至少解决了我的类型问题。要使实际的代码正常工作可能仍然需要大量的工作,但是您帮助了很多。非常感谢。OCaml很奇怪。它起作用了,或者至少它解决了我的类型问题。要使实际的代码正常工作可能仍然需要大量的工作,但是您帮助了很多。非常感谢。OCaml非常奇怪。