首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用报废模板来转换树?

如何使用报废模板来转换树?
EN

Stack Overflow用户
提问于 2010-03-06 12:30:39
回答 3查看 1.4K关注 0票数 7

我是Haskell的新手,所以我想弄清楚如何遍历树。

下面是我在几篇论文中看到的公司示例(略有更改)

代码语言:javascript
复制
data Company  = C [Dept]               deriving (Eq, Show, Typeable, Data)
data Dept     = D Name Manager [Unit]  deriving (Eq, Show, Typeable, Data)
data ThinkTank= TK Name [Unit]         deriving (Eq, Show, Typeable, Data)
data Unit     = PU Employee | DU Dept  deriving (Eq, Show, Typeable, Data)
data Employee = E Person Salary        deriving (Eq, Show, Typeable, Data)
data Person   = P Name Address         deriving (Eq, Show, Typeable, Data)
data Salary   = S Float                deriving (Eq, Show, Typeable, Data)
type Manager  = Employee
type Name     = String
type Address  = String

我想要做的是将一个员工从他所在的地方转移到一个特定的部门。此人可能在部门或ThinkTank中。

在SYB中做事情似乎很容易,只要你是在做一种类型,但我不确定如何处理多种数据类型。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-03-06 13:28:32

您需要从SYB教程开始,

  • http://www.cs.uu.nl/wiki/bin/view/GenericProgramming/SYB

主要的遍历函数包括:

  • http://www.haskell.org/ghc/dist/stable/docs/libraries/syb/Data-Generics-Schemes.html#v%3Aeverywhere
  • http://www.haskell.org/ghc/dist/stable/docs/libraries/syb/Data-Generics-Schemes.html#v%3Asomewhere

尝试一下这些方法,了解一下API,您就会明白这一点。

不过,SYB泛型不仅仅是Haskell的初学者练习。

票数 5
EN

Stack Overflow用户

发布于 2013-01-18 13:59:56

cs.uu.nl上的教程似乎消失了。我为此挣扎了一段时间,梳理了一下论文,然后写了this tutorial。希望你会发现它是有用的。

票数 8
EN

Stack Overflow用户

发布于 2010-03-08 02:41:56

对SYB不是很熟悉,所以我将使用uniplate展示一个示例。这个示例只从它的部门或智库中删除了employee单元,但您将很容易弄清楚如何扩展它来做您想做的事情。

代码语言:javascript
复制
> let jack = E (P "Jack" "The Road") (S 7)
> import Data.Generics.Uniplate.Data
> transformBi (filter (/= PU jack)) $ C [D "Operations" (E (P "Charles" "Seattle") (S 700000)) [PU jack]]
C [D "Operations" (E (P "Charles" "Seattle") (S 700000.0)) []]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2391360

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档