7
votes

Comment transformer un arbre à l'aide de détremper votre chaudière?

Je suis nouveau à Haskell, alors j'essaie de comprendre comment faire des travers d'arbres.

Voici l'exemple de la société (avec un léger changement) que j'ai vu dans plusieurs papiers p>

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


0 commentaires

3 Réponses :


5
votes

Vous devrez commencer par un tutoriel SYB,


0 commentaires

0
votes

Pas trop familier avec SYB, je vais donc montrer un exemple en utilisant Uniplate à la place. L'exemple ne supprime que l'unité des employés à partir de son département ou de son groupe de réflexion, mais vous trouverez facilement facilement comment l'étendre pour faire ce que vous voulez.

> 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 commentaires

8
votes

Le tutoriel à cs.uu.nl semble avoir disparu. J'ai eu du mal pendant cela, ce qui vous permet de peigner sur des papiers, puis a écrit ce tutoriel . J'espère que vous le trouverez utile.


0 commentaires