首页 > 解决方案 > 如何访问自定义类型元素列表中的数据?

问题描述

有一个Ticket具有四个属性的数据类型,然后我创建Trip了一个Tickets 列表。我想通过检查任何连续票的第一张票的目的地城市是否与第二张票的出发地相同来检查一次旅行是否有效。

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

我的问题是如何访问cityOrigincityDestination?所以我可以在validTripfunc中进行比较。

标签: haskell

解决方案


空列表或单例列表显然是有效的:

validTrip :: [Ticket] -> Bool
validTrip [] = True
validTrip [_] = True

有两张或多张票,如果第一张和第二张票“适合”,则该行程有效,其余列表也有效。

validTrip (x:y:rest) = cityDestination x == cityOrin y && validTrip (y:rest)

cityDestination并且cityOrin都是 type 的简单函数Ticket -> String


推荐阅读