如果我已经定义了一个数据类型,比如5个属性。我怎样才能创建其中一个属性的列表。
前:
data Person = Person name fname sexe age height
Marie, John, Jessie :: Person
Marie = Person "Marie" _ _ _
John = Person "John" _ _ _
Jessie = Person "Jessie" _ _ _
如何返回包含所有名称的列表:(Marie
,John
,Jessie
)
答案 0 :(得分:6)
您的代码无效Haskell。你可能有
data Person = Person FName LName Sexe Age Height
type FName = String
type LName = String
data Sexe = Male | Female
type Age = Int
type Height = Float
marie, john, jessie :: Person
marie = Person "Marie" "Lastname1" Female 25 165
john = Person "John" "Lastname2" Male 26 180
jessie = Person "Jessie" "Lastname3" Female 27 170
然后,您可以使用
创建包含三个值marie
,john
和jessie
的列表
db :: [Person]
db = [marie, john, jessie]
现在,您可以使用许多内置函数(例如map
和filter
)对此列表进行操作:
getAge :: Person -> Age
getAge (Person _ _ _ age _) = age
ages :: [Person] -> [Age]
ages people = map getAge people
现在,如果将其加载到GHCi中,您可以将其作为
进行测试> ages db
[25, 26, 27]
有些注意事项:
data TypeName = ConstructorName <FieldTypes>
type AliasName = ExistingType
答案 1 :(得分:1)
您可以使用提取名称的函数map
覆盖列表:
map (\ (Person name _ _ _ _) -> name) people
如果您的数据类型被定义为记录,请执行以下操作:
data Person = Person
{ personName, personFName, personSex :: String
, personAge, personHeight :: Int
}
然后你可以简单地说map personName people
。