Haskell树删除节点/计算所有可能的路径

Haskell树删除节点/计算所有可能的路径,haskell,tree,Haskell,Tree,我有以下结构: data Tree = Leaf Points | Branch Points [Tree] deriving(Eq,Show) data Design = Design Tree Tree Int deriving(Eq,Show) 数据类型树是数据类型设计的一部分,设计包含两个树: type Points = [(Int,Int,Int,Int)] design = Design mtree btree 180 我必须找到所有可能的路径: numberPaths

我有以下结构:

data Tree = Leaf Points | Branch Points [Tree]
deriving(Eq,Show)

data Design = Design Tree Tree Int
deriving(Eq,Show)
数据类型
是数据类型
设计
的一部分,
设计
包含两个

 type Points = [(Int,Int,Int,Int)]

 design = Design mtree btree 180

我必须找到所有可能的路径:

numberPaths :: Design -> Int
并从
点更改第三个
整数,从
设计更改180:

type Points = [(Int,Int,Int,Int)]
design = Design mtree btree 180

changeInt :: Design -> Design
计数路径 为了找到树中的路径数,我们递归地沿着树向下计算每个节点的子路径数,然后将它们相加。因此,除了使用
numberPaths
作为接口外,我们还需要另一个辅助函数,其类型签名为
Tree->Int
。我们称之为下降

descend :: Tree -> Int 
我们将
Leaf
计算为1,将
Branch
计算为其子树的路径数之和。因此,
下降
变为:

descend :: Tree -> Int 
descend (Leaf _)            = 1 
descend (Branch _ subtress) = foldr (\tree sum -> sum + descend tree) 0 subtrees 
函数
numberPaths
只需要调用
down
来计算它的两棵树

numberPaths :: Design -> Int 
numberPaths (Design a b _) = descend a + descend b 
张茵
changeInt
的类型签名表示没有引入
Int
值来更改
设计
类型。我认为这是没有意义的,所以我冒昧地将其更改为
Int->Design->Design

changeInt
的实现遵循类似的模式。为了改变树,我们递归地遍历树的每一层。我们还引入了一个辅助函数
changePoints

changeTree :: Int -> Tree -> Tree
changeTree n (Leaf points)            = Leaf $ changePoints n points
changeTree n (Branch points subtrees) = Branch points' subtrees'
    where points'   = changePoints n points 
          subtrees' = map (changeTree n) subtrees

changePoints :: Int -> Points -> Points 
changePoints n points = map (\(x, y, _, z) -> (x, y, n, z)) points 
然后,
changeInt
只需调用
changeTree
即可完成作业

changeInt :: Int -> Design -> Design 
changeInt n (Design mtree btree _) = Design mtree' btree' n
    where mtree' = changeTree n mtree 
          btree' = changeTree n btree 

在你的帖子中没有问题。我必须在设计树中找到所有可能的路径,并在点中更改一个Int,然后在设计中再次更改180。你已经告诉我们你必须做什么,但你仍然没有告诉我们你遇到的问题和需要帮助的部分。非常感谢!我的意思是:数据树=叶点|分支点[树]有类型点=[(Int,Int,Int,Int)],我想更改最后一个整数。另外,data Design=Design Tree-Tree-Int有Design=Design-mtree-btree 180,我想更改这个180。