2010-03-06 6 views
7

मैं हास्केल के लिए नया हूं, इसलिए मैं यह पता लगाने की कोशिश कर रहा हूं कि वृक्ष ट्रैवर्स कैसे करें।स्क्रैप अपने बॉयलरप्लेट का उपयोग करके पेड़ को कैसे परिवर्तित करें?

यहाँ (एक मामूली परिवर्तन के साथ) कंपनी उदाहरण है कि मैं कई पत्र

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 

मुझे क्या करना चाहते हैं, जहां वह एक विशेष विभाग को है से एक कर्मचारी के लिए कदम है में देखा है। यह व्यक्ति एक विभाग या थिंकटैंक में हो सकता है।

जब तक आप एक प्रकार का काम नहीं कर रहे हैं, तब तक SYB में चीजें करना आसान लगता है, लेकिन मुझे यकीन नहीं है कि एकाधिक डेटा प्रकारों से कैसे निपटें।

उत्तर

5

आप एक SYB ट्यूटोरियल के साथ शुरू करने की आवश्यकता होगी,

मुख्य ट्रेवर्सल कार्य हैं:

एपीआई के लिए समझ पाने के लिए उन लोगों के साथ खेलें, और आप इसे काम करेंगे।

एसवाईबी जेनेरिक हालांकि शुरुआती हास्केल अभ्यास से थोड़ा अधिक है।

0

SYB से बहुत परिचित नहीं है इसलिए मैं uniplate का उपयोग करके एक उदाहरण दिखाऊंगा। उदाहरण केवल कर्मचारी इकाई को अपने डिप्टी या थिंक टैंक से हटा देता है लेकिन आप आसानी से यह पता लगा सकते हैं कि आप जो चाहते हैं उसे करने के लिए इसे कैसे बढ़ाया जाए।

> 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)) []] 
6

cs.uu.nl पर ट्यूटोरियल गायब हो गया प्रतीत होता है। मैंने इसके साथ थोड़ी देर तक संघर्ष किया, कागजात के माध्यम से मिलकर, this tutorial लिखा। उम्मीद है यह आपको उपयोगी होगा।

संबंधित मुद्दे