我有数据类型
data Tree a = Null | Node a {lTree, rTree :: Tree a}
我想重写下面的高阶函数,以便它们可以应用于树。
map :: (a -> b) -> Tree a -> Tree b
fold :: (a -> b -> a) -> a -> Tree b -> a
foldl :: (a -> b -> a) -> a -> Tree b -> a
foldr :: (a -> b -> b) -> b -> Tree a -
因此,请看下面的“努力3.5”描述:
%% Exercise 3.5 %%
% Binary trees are trees where all internal nodes have exactly two children.
% The smallest binary trees consist of only one leaf node. We will represent leaf nodes as
% leaf(Label) . For instance, leaf(3) and leaf(7) are leaf nodes, and therefore small
我正在努力做作业,但我遇到了一些困难。
创建一个递归函数,该函数在整数二叉树中打印叶到另一叶之间的路径(即该树包含整数)。
int printPath(Tree* t,int a,int b)。
注意:您必须处理以下情况:
树上没有a和/或b。如果是,返回-1。
如果存在,则打印值为a的节点和值为b的节点之间的所有值。返回0。
我试过这个代码:
int print1(Tree* tree, int a, int b) {
int cnt;
int c = MAX(a, b), d = MIN(a, b);
a = d;
b = c;
此函数返回的值的含义是什么?如果你愿意,你可以用图表来解释
data Tree a = Empty_Tree | Node {element :: a, left_tree,right_tree :: Tree a}
gurgle :: Tree a -> Tree a -> Bool
gurgle tree_a tree_b = case (tree_a, tree_b) of
(Empty_Tree , Empty_Tree ) -> True
(Empty_Tree , _ ) -> False
(_ , Empty_Tree
我试着用折叠实现一张地图。我可以在哈斯克尔这样做
data Tree a = EmptyTree | Node a (Tree a) (Tree a) deriving (Show)
foldTree :: Tree a -> b -> (b -> a -> b -> b) -> b
foldTree EmptyTree d _ = d
foldTree (Node a l r) d f = f (foldTree l d f) a (foldTree r d f)
mapTree :: Tree a -> ( a -&
考虑到Scala中的代码:
package fpinscala.datastructures
sealed trait Tree[+A]
case class Leaf[A](value: A) extends Tree[A]
case class Branch[A](left: Tree[A], right: Tree[A]) extends Tree[A]
object Tree {
def fold[A,B](t: Tree[A])(f: A => B)(g: (B,B) => B): B = {
t match {
case Leaf(x) =&
在Haskell中,一个简单的二进制表达式树,没有运算符优先级,也没有括号。
如有任何意见,将不胜感激。
data Tree a= Const a
| X
| Plus (Tree a) (Tree a)
| Mult (Tree a) (Tree a)
| Minus (Tree a) (Tree a)
| Div (Tree a) (Tree a)
| Power (Tree a) (Tree a)
| Cos (Tree a)
| Sin (Tree a)
derivi
这段代码来自我已经解决的一个任务。尽管如此,我仍然在尝试弄清楚我是否可以修复我最初的尝试。 所以我们得到了这个树结构和foldTree函数。 data Tree a = Leaf a
| Node (Tree a) (Tree a)
foldTree :: (b -> b -> b) -> (a -> b) -> Tree a -> b
foldTree op f (Leaf x) = f x
foldTree op f (Node l r) = foldTree op f l `op` foldTree op f r 现在必须使用foldTree
我正在添加新的操作符重载来利用c++0x右值引用,并且我感觉我正在生成许多冗余代码。
我有一个名为tree的类,它包含一个关于双精度值的代数运算树。下面是一个示例用例:
tree x = 1.23;
tree y = 8.19;
tree z = (x + y)/67.31 - 3.15*y;
...
std::cout << z; // prints "(1.23 + 8.19)/67.31 - 3.15*8.19"
对于每个二元运算(如加号),每个边可以是左值、右值tree或double。这会导致每个二进制操作产生8个重载:
// core rvalue ove
我试图为Huffman树数据结构实现Eq和Ord,但我得到了几个“模糊定义”和与范围相关的错误。我一直在上学习树的例子
import Data.List
data Tree a = Leaf a Int | Internal (Tree a) (Tree a) Int deriving (Eq, Ord)
instance (Eq a) => Eq (Tree a) where
(Leaf a ac) == (Leaf b bc) = (a == b) && (ac == bc)
(Internal (Tree a1) (Tree a2) ac) == (Intern
我遇到过这样的切割,如果图Graph的某个节点B存在边A-B或B-A,则它应该返回true。 node(A,Graph) :- adjacent(A,_,Graph),!. 问题是,我不明白为什么删除此切割会对返回的解决方案产生任何影响。 据我所知,Prolog语句的cut at the end的唯一用法是当有另一条语句具有相同的名称另一条节点(...)如果第一个成功,我们不希望被调用。一个例子是一个函数,它接受X和Y,并返回较大的一个作为第三个参数。 max1(X, Y, X) :- X > Y, !.
max1(_X, Y, Y). 但是,没有其他名为node(...)的语句因此,
好了,这才是真正的狼人。我从来没有遇到过这样的事情。
我的程序的一部分(编译失败)包含三个名称空间,如下所示:
// namespaceA.h
namespace A {
enum Kind { jimmy, david };
}
// end of namespaceA.h
// namespaceB.h
#include "namespaceA.h"
namespace B {
class Tree {
public:
Tree *prev;
Tree *next;
Tree *down;
A::Kind kind;
Tr
我有以下代码:
data Tree a = ATree a [Tree a]
deriving Show
treeFold :: (b -> a -> b) -> b -> Tree a -> b
treeFold f acc (ATree a []) = f acc a
treeFold f acc (ATree a m) = foldl (treeFold f acc) (f acc a) m
它应该遍历Tree的每个元素,并对值应用一个函数。但它给了我一个错误:
Couldn't match typ
如何实现zipTree,它的行为如下
tree2for 取一个merger,tree1,每对节点,如果两者都有值的话,与mergerotherwise合并成一个Leaf
>>> :t zipTree
zipTree :: (a -> a -> b) -> Tree a -> Tree a -> Tree b
>>> zipTree (+) (Branch 1 Leaf (Branch 2 Leaf Leaf)) (Branch 3 Leaf Leaf)
(Branch 4 Leaf Leaf)
使用下面定义的foldTree
d
我尝试实现一个函数(树a) -> (树a) -> (树a)。函数应该将节点值和起来,并用和返回一棵树。不幸的是,我收到了以下错误消息:
Aufgabe10.hs:4:11:在“+”类声明的类声明中,意外类型“Tree a”应该有一个类+a c,其中.
这是我的密码:
data Tree a = Node a (Tree a) (Tree a)
|Empty
class (+) (Tree a) where
(+) :: (Tree a) (Tree a) -> (Tree a)
instance (Num a) => (+) (Tree a) (T
当我试图编译一个简单的AVL树程序时,我得到了这些错误:
no matching function for call to A::max(A*&, A*&)
candidates are: int A::max(A&, A&)
request for member 'levels' in 'b', wich is of non-class type 'A*'
以下是导致问题的方法:
void A::simpleLeftRotation(A & tree){
A* b = tree.leftNode;
我正在尝试使用id函数应用sum,同时将输入输入到下面使用的program.but。任何指导都是非常感谢的。
data Tree a = Leaf a | Node (Tree a) a (Tree a) deriving (Eq, Show)
reduce_tree :: Tree a -> (a -> b) -> (b -> a -> b -> b) -> b
reduce_tree (Leaf v) = [v]
reduce_tree (Node left root right) = reduce_tree left ++ [root] ++
给定以下代数数据类型,玫瑰树:
data Tree a = Node {
rootLabel :: a,
subForest :: [Tree a]
}
我尝试了一个foldTree函数来掩盖这个列表:(这是2013年的课堂作业的功劳:
treeFold :: (b -> [b] -> b) -> (a -> b) -> Tree a -> b
treeFold f g tree = f (g (rootLabel tree)) (map (g . rootLabel) (subForest tree))
测试
*Party> le
我正在做“”一书中的函数式练习。其中一个练习是为二叉树定义一个函子。
下面是我的尝试(我把这段代码放在scala工作表中):
import cats.Functor
sealed trait Tree[+A]
final case class Branch[A](left: Tree[A], right: Tree[A]) extends Tree[A]
final case class Leaf[A](value: A) extends Tree[A]
object Tree {
def branch[A](left: Tree[A], right: Tree[A]): Tree[A
我目前正在学习Unicode编程的艺术,并将其应用到个人项目中。很快,我意识到很难把它做对,甚至理解你是否正确地做了它:如果工具是错误的,你在评估你的工作结果时可能是错误的。
在这个练习中,我的小目标是了解我应该传递给mkdir的是什么,而不是什么对File::Path::make_path有好处。换句话说:他们期望什么?他们会根据地区来处理编码,还是我应该为他们做呢?
我编写了以下脚本,这些脚本接受来自@ARGV的参数,并为每个脚本创建目录$_,使用这两种函数,同时使用编码和解码。
#!/usr/bin/perl
use warnings;
use strict;
use utf8;
us
假设我有一个二叉树类,它的目的是将一个实际的间隔(a,b)切成多个小区间,选择中点。注:我写的这门课实际上处理的是平面上的三角形,但想法是一样的。
下面是类在头文件中的样子:
class Tree
{
public:
Tree(double &a, double &b, int depth);
~Tree();
Tree getCopy() const;
private:
Tree(double *a, double *b, int depth, int maxDepth);
double *a, *b;
i
我很难排除某些特殊的条件。我已经在这个中创建了示例。
如果我有这样的句子清单:
X-MAS TREE //it should be excluded because match my dictionary
BLA BLA TREE
XMAS TREE
X-MASTREE
X-TREE
X-MASTREE
我有字典说X-MAS树有同义词:XMAS树,XMAS,X树,树.我需要把所有的同义词都换成我的字典词。
如何排除X树?因为所有这些正则表达式都将被替换为X-MAS树,如果我使用关键字TREE搜索,它将是无限循环,因为X-MAS树有树。
我已经尝试过很多种组合,但是没有用:
\b(XMAS TR
我正在尝试获取一列数据(D),并将每个值转换为一个新的列标题。然后,我需要将相应的'E‘值放入新列中。例如:
A B C D E
Elm 1.1 Tree AB10_A 1
Oak 1.2 Tree AB10_A 1
Yew 1.3 Tree AB10_B 2
Maple1.4 Tree AB10_B 1
Ash 1.5 Tree AB10_B 1
Elm 1.6 Tree AB10_C 1
Maple1.7 Tree AB10_C 1
A
我定义了我自己的玫瑰树,并试图总结它的内容。所有类型都匹配,但由于未知原因无法编译。
这是我的代码:
data Tree a = Tree {element :: a, branch :: [Tree a]} deriving (Show)
sumTree :: (Num a) => Tree a -> a
sumTree x = element(x) + sum.map (sumTree) branch(x)
我发现了这些错误:
Prelude> ::l tree.hs
[1 of 1] Compiling Main ( tree.hs, inter
我试图为多态树类型定义Show函数。有人能帮我吗?
import Char
data Tree t =
NilT |
Node t (Tree t) (Tree t)
class Mar t where
maior :: t -> String
instance Mar Tree where
maior (NilT) = "a"
maior (Node t a b) = "b"
instance Show Tree where
show = maior
非常感谢!
解决办法(由ivanm提出):
我试图为以下类型实现fmap:
data Tree a = Leaf a | Node a (Tree a) (Tree a) | Empty deriving (Eq,Show)
instance Functor Tree where
fmap _ Empty=Empty
fmap f (Leaf x)=Leaf (f x)
fmap f (Node t left right)=Node (f t) left right
我不断得到类型错配错误:
误差
* Couldn't match type `a' with `b'
我不明白以下代码:
type 'a b_tree = Empty | Node of 'a*'a b_tree*'a b_tree
let add_trees_with left right all =
let add_right_tree all l =
List.fold_left (fun a r -> Node('x', l, r) :: a) all right in
List.fold_left add_right_tree all left
我不明白在in部分之后会发生什么。List.fol
注:这个问题跟在之后,我希望还可以把它作为一个新的问题来问。
我试图为一个树类实现“三个半大规则”(复制和交换成语),如下所示:
class Tree
{
friend void swap(Tree &first, Tree &second); // Swap function
public:
Tree(const double &a, const double &b, int depth); // Public constructor (derived from the default (private) constructor)
T
我一直很感兴趣的是,我是否可以创建一个非常简单的AST,它由操作和叶节点组成。但更具体地说,我希望能够使用任何类型作为叶节点,而不是在AST数据类型本身中显式指定它,如下所示。 -- Instead of this
data Tree = Number Int | Word String | Operation Tree (Tree -> Tree -> Tree) Tree
-- I'd like something along the lines of this
data Tree a = Leaf a | Operation Tree (Tree -> Tr
我有一个数据类型:
datatype 'a tree = LEAF of 'a
| NODE of 'a tree * 'a tree;
我希望创建一个名为maptree(f)的函数,它返回一个匿名函数,该函数能够在树上逐个执行f元素。为什么以下选项不起作用?
fun maptree(f) = fn LEAF(a) => LEAF(f(a))
| NODE((b,c)) => NODE(f(b), f(c));
我得到了错误:
stdIn:56.7-56.65 Error: types o
如果我有一个非常简单的表名为tree
create table if not exists tree (id int primary key, parent int, name text);
和几行数据
insert into tree values (1, null, 'A');
insert into tree values (2, 1, 'B');
insert into tree values (3, 1, 'C');
insert into tree values (4, 2, 'D');
insert into tre
我想在Scala中实现一个库。我刚刚开始,我已经很难以模块化和可伸缩的方式设计它了。
我需要些帮助!例如,我定义了一棵树ADT。
sealed trait Tree[+A,+B,+C]
case object EmptyTree extends Tree[Nothing, Nothing, Nothing]
case class Leaf[A,B,C](value: C) extends Tree[A,B,C]
case class Branch_A1[A,B,C](op: B, left: Tree[A,B,C]) extends Tree[A,B,C]
case class Branch_
我想用元组(k,v)构建带有键值叶子的二叉树。
我的代码:
data Tree k v = EmptyTree
| Node (k, v) (Tree k v) (Tree k v)
deriving (Show, Eq, Ord, Read)
emptyTree :: (k,v) -> Tree k v
emptyTree (k,v) = Node (k, v) EmptyTree EmptyTree
treeInsert :: (Ord k) => (k,v) -> Tree k v -> T