对于我的函数式编程课的作业,我正在做一个关于树的练习。更具体地说是玫瑰树。在我们得到的框架中,'Rose‘已经定义了,但是它有一个操作符:>。我在hoogle上搜索了它,它说它是序列的最右边的元素,而其余的元素是序列的其余部分。(以下框架的一部分)
data Rose a = a :> [Rose a]
deriving (Eq, Show)
-- Exercise 1
root :: Rose a -> a
root = undefined
children :: Rose a -> [Rose a]
children = undefined
我根本不需
我正在处理一个Snowflake查询,它使用RLIKE函数在文本块中查找特定的单词。这是我的查询的简化版本: SELECT id FROM table WHERE RLIKE (text,'.* red .*|.* green .*|.* blue .*','i') 我要查询的表的一些示例: 第1行: id = 1,text =‘表是红色的,很漂亮’ 第2行: id = 2,text =‘花园里有一朵红玫瑰’ 第3行: id = 3,text =‘我在绿色的花园里看到一朵红玫瑰’ 此时,查询将返回表中的所有3行。我想要做的是从结果中排除某个单词组合。在这个例子
我正在做一项任务,要求我显示一个菜单,然后提示客户选择一种玫瑰类型和选择的玫瑰花数量。我有一个累积变量可以接受,并用于最终的事务计算。但是,当客户选择订购更多玫瑰时,我如何让它显示未累计/输入的变量和价格?
elif roseTypeOrdered == 'r' or roseTypeOrdered == 'R':
numRedRosesOrdered += int(input("How many red roses would you like to order?"))
totalPrice += numRedR
考虑玫瑰树的以下定义:
data RTree a = R a [RTree a]
我需要帮助定义函数rtHeight :: (RTree a) -> Int来计算玫瑰树的高度。
到目前为止,我已经尝试了以下方法
rtHeight R a [] = 1
rtHeight R a l = 1 + rtHeight l
然而,这是行不通的,因为我是一个玫瑰树的列表。我还尝试了以下几点:
rtHeight R a [] = 1
rtHeight R a l = maximum (map (rtHeight) l)
我相信这是失败的,因为我在倒下的时候并没有增加一个水平。
这个问题深入研究了将玫瑰树折叠到路径上的代码。我对无限的玫瑰树进行了实验,我发现所提供的解决方案不够懒惰,不能在无限深和宽的无限玫瑰树上工作。
考虑一棵玫瑰树,像:
data Rose a = Rose a [Rose a] deriving (Show, Functor)
这里有一棵有限的玫瑰树:
finiteTree = Rose "root" [
Rose "a" [
Rose "d" [],
Rose "e" []
],
Rose "b" [
据我所知,来自Haskell的递归数据类型对应于Hask范畴[,]内函子的初始代数。例如:
自然数data Nat = Zero | Succ Nat与F(-) = 1 + (-)的初始代数相对应。
列表,data List a = Nil | Cons a (List a),对应于F(A, -) = 1 + A × (-)的初始代数。
然而,我不清楚与玫瑰树对应的内源性物质应该是什么:
data Rose a = Node a (List (Rose a))
令我困惑的是,有两个递归:一个用于玫瑰树,另一个用于列表。根据我的计算,我会得到以下函子,但这似乎不对:
F(A, •
我完全不知道如何在Haskell中进行一些树转换。我需要从一棵玫瑰树开始,定义为:
data Rose a = Node a [Rose a] deriving (Eq, Show, Ord)
到二叉树,它被定义为:
data Btree a = Empty | Fork a (Btree a) (Btree a) deriving (Eq, Show, Ord)
在我的课上,我得到了一个类似的函数,但使用了不同的二叉树定义。对于该函数,玫瑰树的定义相同,而二叉树的定义如下:
Btree a = Leaf a | Fork (Btree a) (Btree a)
其中从玫瑰树到二叉树的函数定义
我正在尝试一个简单的玫瑰树代码。
data RoseT a = Leaf a | Node a [RoseT a] deriving (Show)
instance Eq (RoseT a) where
(==) (Leaf a) (Leaf b) = a == b
(==) (Node a rs1) (Node b rs2) = and ((a==b): (zipWith (==) rs1 rs2))
(==) _ _ = False
我可以使用quickcheck来测试Eq实例的实现吗?如果是,怎么做?如果没有,最好的选择是什么?
我还有一个函数,它执行以下操作:
appendP