我一直在與這個問題爭鬥了一段時間。我試圖創建一個「組織」,這是一個健身房列表。這些健身房是人的名單。每個人都有一個身份證號碼,年齡和信用額度。基本Haskell:通過多個列表搜索相同的元素
我希望FindID函數能夠搜索整個組織以搜索健身房列表,找到具有輸入ID的用戶,然後返回他們的信用總額。但是,我覺得我正在過度地糾正這個問題,現在我真的很掙扎。
newtype ID = ID Int deriving (Show)
newtype Age = Age Int deriving (Show)
newtype Credit = Credit Int deriving (Show)
newtype Person = Person (ID, Age, Weight) deriving (Show)
type Gym = [Person]
type Organisation = [Gym]
getAge :: Person -> Int
getAge (Person(a,Age b,c)) = b
getID :: Person -> Int
getID (Person(ID a,b,c)) = a
getCredit :: Person -> Int
getCredit (Person(a,b,Credit c)) = c
p = Person (ID 123, Age 65, Credit 12000)
q = Person (ID 321, Age 64, Credit 0)
e = Person (ID 453, Age 30, Credit 3000)
r = Person (ID 123, Age 65, Credit 2310)
s = Person (ID 364, Age 32, Credit 32340)
t = Person (ID 123, Age 65, Credit 1300)
org1 = [p,q,e]
org2 = [r,s,t]
hasPerson :: Gym->Int-> Bool
hasPerson gym' id' = not (null(filter hasperson' gym'))
where
hasperson' person' = getID person' == id'
findID:: ID -> Organisation -> Int
findID id' org = total
where
IsInGym org' = hasPerson (org' id')
validGym = filter (IsInGym) org'
total = sum (map getCredit validGym)
我很確定這段代碼不能編譯。例如。如何定義「validGym」和「market」? – Philipp
對不起,我複製了另一個示例中的代碼,並且在將它放在此處時忘記進行更改。現在改變了。 – John