Ocaml - 将 n-ary_tree 与空树匹配

Ocaml - match n-ary_tree with empty tree

假设我有一个 n 元树类型

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

这对应空树

let empty_tree ()= Node(ref[]);;

我正在尝试编写一个仅查看我的树是否为空的函数,例如

let checkIsEmpty t = match t with empty_tree-> print_string "tree is empty";;

但是当我写checkIsEmpty empty_tree;;时它只是return一个单位,它不会打印"tree is empty"

我也试过

let checkisEmpty t = match t with z when z = empty_tree-> print_string "tree is empty";;

可惜还是失败了。

我怎么看我的树是不是空的?如果可能的话,我想保持匹配和声明树的方式(空不是类型的一部分..)。

谢谢!

您很可能需要刷新输出才能看到它。你可以这样写:

print_string "tree is empty"; flush stdout

但是,您的第一个匹配项不起作用。模式中的任何标识符都会引入一个新变量。因此,您第一个实现中的变量 empty_tree 将始终匹配您传递给函数的任何树。 (或者实际上它会匹配任何值。)

添加 flush stdout 并假设有一个全局值 empty_tree 是一棵空树后,第二个实现应该会更好一些。但是您还应该添加一个匹配树 not 空的情况;否则你会得到一个例外。

此外,您的 empty_tree 是一个 returns 空树的函数。它本身不是一棵空树(正如您最新的代码所假设的那样)。

(我建议你问完问题后不要修改太多。很难写出与你所问内容相对应的答案。)