获取具有由另一个函数计算的最大“值”的列表元素

时间:2017-04-30 23:43:26

标签: list haskell types

我有这些数据和类型

data Cliente = Uncliente {nombre::String,resistencia::Int,bebidas::[Bebida],amigos::[Cliente]} deriving (Show) 

type Bebida = Cliente -> Cliente 

type Nombre = String
type Duracion = Float
type Acciones = [Bebida]
type Itinerario = (Nombre,Duracion,Acciones)

我有这个功能:

此函数使用itinerario和cliente并返回修改了值的客户端。

realizarItinerario :: Itinerario -> Cliente -> Cliente
realizarItinerario itinerario cliente = tomarTragos cliente (conseguirAcciones itinerario)

我有这个功能可以让你知道每个itinerario的强度

conocerIntensidad :: Itinerario -> Float
conocerIntensidad (nombre,duracion,acciones) = ((genericLength acciones)/duracion)

这是辅助功能:

conseguirAcciones :: Itinerario -> [Bebida]
conseguirAcciones (_,_,acciones) = acciones

我需要创建一个给出Itinerarios和Client列表的函数,它返回给他的最高强度itinerario的客户端:

我知道如何获得最高的itinerario,但不知道如何将它应用于同一个功能。

1 个答案:

答案 0 :(得分:0)

我相信你想要的东西:

import Data.List
import Data.Ord

applyHighestIntensityItinerario :: [Itinerario] -> Cliente -> Cliente
applyHighestIntensityItinerario itinerarios cliente =
  let itinerario = maximumBy (comparing conocerIntensidad) itinerarios
  in  realizarItinerario itinerario cliente

此处,maximumBy (comparing conocerIntensidad)选择列表itinerarios的元素,其conocerIntensidad计算的强度具有最大值。 maximumBy来自Data.Listcomparing来自Data.Ord

然后,let子句用于将其分配给变量itinerario并使用辅助函数realizarItinerario应用它。