我是Haskell的新手,所以我想弄清楚如何遍历树。
下面是我在几篇论文中看到的公司示例(略有更改)
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中做事情似乎很容易,只要你是在做一种类型,但我不确定如何处理多种数据类型。
发布于 2010-03-06 13:28:32
您需要从SYB教程开始,
主要的遍历函数包括:
尝试一下这些方法,了解一下API,您就会明白这一点。
不过,SYB泛型不仅仅是Haskell的初学者练习。
发布于 2013-01-18 13:59:56
cs.uu.nl上的教程似乎消失了。我为此挣扎了一段时间,梳理了一下论文,然后写了this tutorial。希望你会发现它是有用的。
发布于 2010-03-08 02:41:56
对SYB不是很熟悉,所以我将使用uniplate展示一个示例。这个示例只从它的部门或智库中删除了employee单元,但您将很容易弄清楚如何扩展它来做您想做的事情。
> 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)) []]https://stackoverflow.com/questions/2391360
复制相似问题