Haskell 从BST打印变量
我正在尝试一个练习,在这个练习中,我必须打印出bst的根节点。他们告诉我使用Haskell 从BST打印变量,haskell,Haskell,我正在尝试一个练习,在这个练习中,我必须打印出bst的根节点。他们告诉我使用数据BinSearch x y=Empty |节点xy(BinSearch x y)(BinSearch x y)(意味着二元搜索树要么没有,要么有)和签名,结果::BinSearch x y->可能是y。我需要像这样运行程序 > result None Nothing > result (Node 0 44 None None) Just 44 我对怎么做有点困惑。如果我能控制签名,那就容易了,但我不知
数据BinSearch x y=Empty |节点xy(BinSearch x y)(BinSearch x y)
(意味着二元搜索树要么没有,要么有)和签名,结果::BinSearch x y->可能是y
。我需要像这样运行程序
> result None
Nothing
> result (Node 0 44 None None)
Just 44
我对怎么做有点困惑。如果我能控制签名,那就容易了,但我不知道该怎么做
我唯一想到的是
data BinSearch x y = None | Node x y (BinSearch x y) (BinSearch x y)
result :: BinSearch x y -> Maybe y
result (Node a b None None) = b
但是我得到的错误是它不能匹配v和BinSearch x0 y0
编辑:我已经修复了所有的转录错误,抱歉。这个问题现在的表述与书中的一模一样。两个小提示:首先,它必须是
BinSearch
,大写字母B
。我怀疑这是你的抄写错误。二是语法提示;您的模式需要括号,如下所示:
result (Node a b None None) = ...
这不是一个完整的解决方案;但这会让你越过这个障碍,进入下一个(更有趣的)错误。我明白了。我很笨。你只需要在结尾加上“仅仅44”。我的问题是,我不知道“Just”是内置的。您描述的规范是错误的。@dfeuer您能详细说明一下吗?@JoffreyBaratheon:当返回类型为
可能是y
时,根本无法返回整个根节点。您只能返回正确节点的值。并且不能一次返回可能是,另一次返回二叉树xy
。而且,BinTree
无论如何都不可能是小写。binSearch
需要大写-例如,数据binSearch…
只是
不是内置函数。它只是一个数据类型的构造函数,它被声明为data-maybea=Nothing | Just a
。