我们说我有一个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不是类型的一部分......)。
谢谢!
答案 0 :(得分:0)
您很可能需要刷新输出才能看到它。你可以这样写:
print_string "tree is empty"; flush stdout
但是,您的第一场比赛不起作用。模式中的任何标识符都会引入新变量。因此,第一个实现中的变量empty_tree
将始终匹配您传递给函数的任何树。 (或者它确实会匹配任何价值。)
添加flush stdout
后,第二个实现应该会更好一些,并假设全局值empty_tree
是空树。但是,您还应该添加一个匹配,当树不为空时;否则你会得到一个例外。
此外,您的empty_tree
是一个返回空树的函数。它本身不是空树(正如您最新的代码所假设的那样)。
(我建议你在询问之后不要过多地修改你的问题。这样就很难写出与你问的答案相符的答案。)