你的代碼是無效的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
。
- 類型名稱和構造函數必須以大寫字母開頭
- 數值名稱必須以小寫字母開頭。
謝謝!但我想要的是返回一個列表(瑪麗,約翰,傑西)......在他們的名字列表中......而不是列表中的對象。 – Caro
@Caro創建一個接受'Person'並返回'FName',然後使用'map'的函數。我會讓你自己寫一個「年齡」的例子,它應該是相當簡單的。 – bheklilr