Haskell 如何链接以获取餐厅名称

Haskell 如何链接以获取餐厅名称,haskell,Haskell,我想通过服务(主管)获得餐厅等级评定结果的餐厅名称。我设法找到了一种过滤服务名称(主管)和打印数据的方法 第一个代码过滤掉服务名称(主管),第二个代码显示餐厅输出。服务代表主管。数据库包含餐厅详细信息列表 我不确定如何将用于从数据库过滤的第一个函数链接到用于输出过滤结果的第二个函数 终端的输入类型 ratedListStr "Colin" testDatabase 我想要达到的输出 [Restaurant "03" "John" &q

我想通过服务(主管)获得餐厅等级评定结果的餐厅名称。我设法找到了一种过滤服务名称(主管)和打印数据的方法

第一个代码过滤掉服务名称(主管),第二个代码显示餐厅输出。服务代表主管。数据库包含餐厅详细信息列表

我不确定如何将用于从数据库过滤的第一个函数链接到用于输出过滤结果的第二个函数

终端的输入类型

ratedListStr "Colin" testDatabase
我想要达到的输出

[Restaurant "03" "John" "Orchard" 6 [9]
下面是我的代码

data Restaurant = Restaurant ResID Brand Area Stars [(Service, LevelRating)]

type Database = [Restaurant]

testDatabase = [
               Restaurant "09" "Chef Kang's" "Rochor" 1
               [("Colin", 4), ("Sam", 7), ("Petrina", 6)],

               Restaurant "10" "Corner House" "Tanglin" 1
               [("Bryan", 7),("Colin", 4),("Nixon", 5), ("Nixon", 7), ("Sam", 5)]

]

-- restaurant service
getService :: Restaurant -> [Service]
getService (Restaurant _ _ _ _ xs) = map fst xs

--filter name of supervisor
restaurantService :: Service -> [Restaurant] -> [Restaurant]
restaurantService se = filter (elem se. getService)

--display output of restaurant
ratedListStr :: Restaurant -> String
ratedListStr (Restaurant rid br ar st s) = "\nRestaurantID: " ++ rid ++ "\n Brand: " ++ br ++ "\n Area: " ++ ar ++ "\n Star: " ++ show st ++ "\n Service Rating" ++ show s 
我只需要给出餐厅(品牌)的名称和所选主管的服务等级

也许您需要在这个函数上:

getBrand :: Restaurant -> Brand
getBrand (Restaurant _ brand _ _ _) = brand

getServices :: Restaurant -> [(Service, LevelRating)]
getServices (Restaurant _ _ _ _ services) = services

takeRating :: Service -> [Restaurant] -> [(Brand, LevelRating)]
takeRating service restaurants = do
    restaurant <- restaurants
    case find (\(s, r) -> s == service) (getServices restaurant) of
        Nothing -> mempty
        Just (_, rating) -> return (getBrand restaurant, rating)
getBrand::餐厅->品牌
getBrand(餐厅品牌)=品牌
getServices::餐厅->[(服务,等级)]
getServices(餐厅服务)=服务
takeRating::服务->[餐厅]->[(品牌,等级)]
提供服务的餐馆
餐厅s==服务(getServices餐厅)
无->记忆
Just(u,评级)->return(getBrand餐厅,评级)
此功能返回所选主管的餐厅品牌及其服务等级列表

我只需要给出餐厅(品牌)的名称和所选主管的服务等级

也许您需要在这个函数上:

getBrand :: Restaurant -> Brand
getBrand (Restaurant _ brand _ _ _) = brand

getServices :: Restaurant -> [(Service, LevelRating)]
getServices (Restaurant _ _ _ _ services) = services

takeRating :: Service -> [Restaurant] -> [(Brand, LevelRating)]
takeRating service restaurants = do
    restaurant <- restaurants
    case find (\(s, r) -> s == service) (getServices restaurant) of
        Nothing -> mempty
        Just (_, rating) -> return (getBrand restaurant, rating)
getBrand::餐厅->品牌
getBrand(餐厅品牌)=品牌
getServices::餐厅->[(服务,等级)]
getServices(餐厅服务)=服务
takeRating::服务->[餐厅]->[(品牌,等级)]
提供服务的餐馆
餐厅s==服务(getServices餐厅)
无->记忆
Just(u,评级)->return(getBrand餐厅,评级)

此函数返回pairs品牌餐厅列表及其对所选主管的服务评级。

您能举一两个例子说明您希望新代码块做什么吗?您将向它提供什么输入,它将以什么输出进行响应?无论如何,这并不完全清楚,但您可能想看看这些列表管理功能中的一些或全部:
map
concat
unlines
unwords
。因此不可能将这两个合并为输出?您想要的几乎肯定是可能的。但我们不能再说了,因为我们不明白你想要什么。请参阅我上面的第一条评论,了解更多关于您想要什么的方法。我已使用输入和输出修改了问题,并重新表述了我的问题。它更好吗?你能举一两个例子说明你希望你的新代码块做什么吗?您将向它提供什么输入,它将以什么输出进行响应?无论如何,这并不完全清楚,但您可能想看看这些列表管理功能中的一些或全部:
map
concat
unlines
unwords
。因此不可能将这两个合并为输出?您想要的几乎肯定是可能的。但我们不能再说了,因为我们不明白你想要什么。请参阅我上面的第一条评论,了解更多关于您想要什么的方法。我已使用输入和输出修改了问题,并重新表述了我的问题。它更好吗?对不起,谢尔盖,关于(u,评级)部分,它是用于品牌和级别评级输出的?对于这一行Nothing->mempty,这意味着什么?@TitaniaLo在上面的代码中写了以下内容:逐个查看所有餐厅,并从列表中查找每个餐厅的给定服务,如果他发现(它是
只是(u,rating)->…
),则返回一对品牌和评级(
返回(…)
),否则(它是
Nothing->…
)返回“Nothing”(
mempty
)。换句话说,对于列表
餐厅的每个元素,要么替换餐厅以配对,要么删除餐厅。@TitaniaLo如果您在Google或Hoogle中键入Monoid和MonadSorry Sergey,关于Just(\u,评级),您可以找到有关它的更多信息部分,用于品牌和级别评级输出?对于这一行,Nothing->mempty,这意味着什么?@TitaniaLo在上面的代码中写了以下内容:逐个查看所有餐厅,并从列表中查找每个餐厅的给定服务,如果他发现了(它是
只是(uu,rating)->…
),则返回一对品牌和评级(
return(…)
),else(它是
Nothing->…
)返回“Nothing”(
mempty
)。换句话说,对于列表
餐厅的每个元素,
要么替换餐厅以配对,要么删除餐厅。@TitaniaLo如果您键入Google或Hoogle什么是Monoid和Monad,您可以找到关于它的更多信息