Ocaml 如何传递递归函数的值而不是定义
我有一个非常简单的递归函数,可以从char列表向树添加一个分支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))]) 我希望这会创建一个只包含一个分支的树,其中会有一堆带
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非常奇怪。