Ocaml - 将n-ary_tree与空树匹配

时间:2017-03-07 18:38:07

标签: syntax tree ocaml is-empty

我们说我有一个n-ary树型

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;;时,它只返回一个单位,它不会打印"树是空的"

我也尝试过这种方式

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

可悲的是,它仍然失败。

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

谢谢!

1 个答案:

答案 0 :(得分:0)

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

print_string "tree is empty"; flush stdout

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

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

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

(我建议你在询问之后不要过多地修改你的问题。这样就很难写出与你问的答案相符的答案。)