2015-12-17 105 views
1
data Person = Person { firstName :: String 
        , lastName :: String 
        , age :: Int 
        } deriving (Show) 


buffy = Person "Buffy" "Summers" 22 
burt = Person "Burt" "Reynolds" 23 
cloud = Person "Cloud" "Strife" 22 
rick = Person "Rick" "Sanchez" 21 

people = [buffy,burt,cloud,rick] 

我在尋找打印people列表中的firstName s各自元素的多種方式。打印數據類型 - 哈斯克爾

打印這些元件可以在形式打印,如:

  • x1,x2,x3,...xn
  • [x1,x2,x3,...xn]

  • 多行:

    x1 
    x2 
    x3 
    ... 
    xn 
    
+0

你說你在尋找「多種方式」 - 這些不同的方法應該如何區別?他們應該以不同的方式打印每個元一種方法是'mapM_ print people',另一種方法是'sequence_(map print people)',這算作兩種不同的方式嗎? – user2407038

+0

是的,我只是有興趣看到在Haskell中打印數據類型的不同方法。 – Genesis

回答

4

若y OU創建一個記錄類型一樣Person,你會得到以下字段選擇器:

firstName :: Person -> String 
lastName :: Person -> String 
age :: Person -> Int 

所以,你可以在map firstName您的列表將您[Person][String]

打印firstName s,則僅僅是mapM_ (putStrLn . firstName) people

+0

這是否意味着我將不得不擺脫我的數據結構中的屬性,並讓它讀取數據Person = Person String String Int? – Genesis

+2

不,我的意思是,如果你像你在你的問題中那樣定義'Person',你從中得到的東西之一(「免費」)是選擇器函數firstName。你不需要(事實上,你不能,因爲命名衝突)定義'firstName',函數,你自己如果你已經有'firstName',那麼這個字段。 – Cactus