有一个具有四个属性的数据类型Ticket
,然后我创建了Trip
列表的Ticket
。我想通过检查第一张票证的目的地城市是否与第二张票证的出发地相同,来检查旅行是否有效。
data Ticket = Ticket {
typeBilhete :: String
, typeClass :: String
, cityOrin :: String
, cityDestination :: String
} deriving (Show)
data Trip = Trip [Ticket]
validTrip :: [Bilhete] -> Bool
validTrip b =
if head b == "Recife" = then True
else False
我的问题是如何访问cityOrigin
和cityDestination
之类的元素?这样我就可以在validTrip
函数中进行比较。
答案 0 :(得分:2)
一个空列表或单例列表显然是有效的:
validTrip :: [Ticket] -> Bool
validTrip [] = True
validTrip [_] = True
对于两张或更多票证,如果第一张票证和第二张票证“合适”,则旅行有效,其余列表也有效。
validTrip (x:y:rest) = cityDestination x == cityOrin y && validTrip (y:rest)
cityDestination
和cityOrin
都是类型为Ticket -> String
的简单函数。
答案 1 :(得分:1)
这是一个简单的单行代码:
validTrip :: [Ticket] -> Bool
validTrip b =
and [ cityDestination t == cityOrigin t2 | (t,t2) <- zip b (drop 1 b)]