2017-04-30 11 views
0

により計算された最大「値」を持つリストの要素を、私はこのデータと種類は、私はこの機能を持っている別の関数

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のリストでは、彼に適用されたHighest Intensity itinerarioでクライアントを返します。

私は最高のitinerarioを取得する方法を知っていますが、同じ関数にそれを適用する方法はわかりません。ここで

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)conocerIntensidadによって計算され、強度の最大値を持つリストitinerariosの要素を選択します:

+1

あなたの質問にもっとわかりやすいタイトルを付けるようにしてください。 - "haskellのリストとタプル"はかなり意味があります。 (あなたの質問を短い意味のあるタイトルに要約することが困難な場合、それはあなたの質問が十分ではないことを示すサインかもしれません) – duplode

+0

fst。 maximumBy(sndを比較)。 map(\ x - >(x、conocerIntensidad x)) ' – karakfa

答えて

0

は、私はあなたのような何かをしたいと考えています。 maximumByData.Listであり、comparingData.Ordです。

そして、let句は、変数itinerarioに割り当てとヘルパー機能realizarItinerarioを使用してそれを適用するために使用されます。

+0

説明をありがとうございました。それは優秀に働く –

関連する問題