【问题标题】:Ocaml - match n-ary_tree with empty treeOcaml - 将 n-ary_tree 与空树匹配
【发布时间】:2017-03-08 02:59:49
【问题描述】:

假设我有一个 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;;它只是返回一个单位,它不会打印“树是空的”

我也试过了

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

遗憾的是它仍然失败。

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

谢谢!

【问题讨论】:

    标签: syntax tree ocaml is-empty


    【解决方案1】:

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

    print_string "tree is empty"; flush stdout
    

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

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

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

    (我建议您在提出问题后不要过多地修改您的问题。这样很难写出与您提出的问题相对应的答案。)

    【讨论】:

    • 感谢您的回答,是的,我知道我应该为它不为空时做一个案例,但现在我只是在我的函数中传递的树等于我的树时才尝试匹配我的树empty_tree,我尝试了flush stdout,但它也不起作用:((我尝试使用“when”关键字)
    • 我实际上是在做 checkisEmpty empty_tree,在函数中我查看 t(在这种情况下是 empty_tree)是否等于 empty_tree,它不会写下“树为空”。即使我添加一个案例,| _ -> print_string "not empty"; flush stdout 之类的东西也不会打印出来
    • (再次注意您的empty_tree 是一个函数,而不是树。)也许您根本无法获得输出。如果你只执行这个会发生什么:print_string "testing 1 2 3\n"; flush stdout?作为另一边评论,如果您以"\n" 终止,则更容易看到输出,否则它可能会丢失。
    • 你说得对,我一定是在获取输出时遇到了麻烦,你的行甚至没有打印出来,我得到了这个输出:- : unit = ()。我正在使用这个:link 在运行整个项目之前尝试我的代码,但是在这里它工作得很好:link,但我的功能仍然无法正常工作。我知道 empty_tree 是一个函数,但这是否意味着我不能以这种方式使用它?
    • 平等 (=) 甚至没有为函数类型定义。这肯定会有所作为。我的建议:在empty_tree 之后删除()。然后它是一棵树,瞧。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-06
    • 1970-01-01
    • 1970-01-01
    • 2015-03-16
    • 2013-08-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多