在两周内,我一直在用OCaml做一些简单的程序。我注意到,当我们使用递归结构T时,我们希望在T上有信息I,然后根据信息I,我们有两种类型的递归函数。
为了简单起见,我们假设T是一棵二叉树。因此,我将使用以下类型:
type 'a tree = Empty | 'a * 'a tree * 'a tree
现在,假设可以在二叉树上从左到右计算信息I。当我说从左到右时,这意味着信息I可以从根计算到叶,而不需要向后。
更清楚的是,假设我们想要的信息I只是“二叉树的节点数”。这个信息的好处是,当我们到达所有的叶子时,我们就得到了I,所以我们从根开始到右边,递归地扩展到左
我创建了描述二叉树的新类型
data BinTree a = Null | Num a (BinTree a) (BinTree a)
deriving (Show)
并创建了以下函数:
treehandle :: BinTree a -> Bool
treehandle a = True
检查至少输入值。
当输入值为Null时,程序输出结果成功,但不能输入二叉树。我试图这样做:
treehandle (5 (Null) (Null))
但获得:
<interactive>:66:13:
No instance for (Num (BinTree a1 -> BinTr
我很难理解如何正确地实现二叉树的monad (>>=)。我有以下二叉树:
data BinTree a = Leaf a | Node a (BinTree a) (BinTree a)
deriving (Eq, Ord, Show, Read)
下面是我的monad的(>>=)运算符:
Node x l r >>= f = Node (f x) (l >>= f) (r >>= f)
__________^
我一直收到这个错误:
Couldn't match type `b
我想知道如何在Haskell中计算一般树的深度。我可以为简单的二叉树找出解决方案,但不能解决具有任意数量叶子的一般树。
这是我为二叉树编写的代码。
--depth of a binary tree.
depth :: Tree a -> Int
depth Nil = 0
depth (Node n x1 x2) = 1 + max (depth x1) (depth x2)
如何为常规树修改此设置?一般的树包含一个树列表,这就是我遇到困难的地方。
其次,我希望将树转换为列表(这样我就可以执行诸如计算和等操作)。
同样,我可以针对二叉树解决这个问题,但不能针对一般
给定是一种用来构造二叉树的类型:
type tree = Leaf of int | Node of int * tree * tree
现在假设我们希望通过类型来表示二叉树包含一个元素为零的节点,也就是说,我想表示如下形式的内容:
let rec p x = match x with
| Leaf(y) -> y = 0
| Node(y,l,r) -> y = 0 || (p l) || (p r)
type zerotree = ZeroTree of t:tree where p(t)
这意味着,每当我有一个类型为Zero
我仍然有这个问题,所以我可以寻求更多的帮助。
我们得到的是:
datatype which = STRING of string | INT of int
第1部分。我们被告知需要为二叉树创建另一个名为whichTree的数据类型,该二叉树包含类型为“where”的值,其中数据仅位于树的叶部。
我假设这是正确的答案:
datatype whichTree = Empty | Leaf of which | Node of whichTree*whichTree;
事实证明,它并不像我运行时那样:
val inttree = Node(Leaf(1), Leaf(2));
我得到一个错误。
我能
我正在做一个作业,画一棵二叉树。我不明白如何摆脱“不在作用域:数据构造函数”这个错误。
data BinTree a = Node a (BinTree a) (BinTree a) | Emp
deriving (Show)
hyp :: [String] -> [String]
hyp = map ("--" ++)
showTree :: Show a => BinTree a -> [String]
showTree Emp = []
showTree Node p left right = show p ++ newl ++ hyp (show
我试着练习泛型和多态。我有一个节点课程如下:
public class Node<T> {
public T name;
public Node[] children;
}
然后是一个通用树类:
public class Tree<T> {
public Node<T> root;
}
现在,我正在尝试实现一个二叉树。二叉树是一个树,因此满足是一个多态规则。我很难执行二叉树中的节点最多可以有两个子节点。
我应该将节点类扩展到二进制节点,并且子数组总是初始化为2大小吗?如果BinaryTree扩展树,如何对子成员变量设置限制?
就像我在