【问题标题】:Getting the element of a list with maximum "value" as calculated by another function获取由另一个函数计算的具有最大“值”的列表元素
【发布时间】:2017-04-30 23:43:26
【问题描述】:

我有这些数据和类型

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)

我有这个功能:

这个函数接受一个行程和一个客户,并返回一个修改了值的客户。

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

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

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

这是一个辅助功能:

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

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

我知道如何获得最高行程,但不知道如何将其应用于同一功能。

【问题讨论】:

  • 请尝试为您的问题提供更具描述性的标题——“haskell 中的列表和元组”几乎可以表示任何含义。 (如果您在将问题总结为简短而有意义的标题时遇到困难,这可能表明您的问题不够明确或不够具体。)
  • fst 。 maximumBy(比较 snd)。地图 (\x -> (x,conocerIntensidad x))`

标签: list haskell types


【解决方案1】:

我相信你想要这样的东西:

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 应用它。

【讨论】:

  • 非常感谢您的解释。效果很好
猜你喜欢
  • 2022-01-05
  • 1970-01-01
  • 2020-06-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多