比较元组列表以查找开票清单中最昂贵的项目

Ian*_*den 0 haskell tuples

这是我过去的考试试卷中的一个问题.请帮忙.

给出超市票据的类型.该法案的每个条目都包含产品名称,购买该产品的数量以及单个产品的价格.

type Product = String
type Count = Float -- type chosen for simple arithmetic
type Price = Float
type Bill = [(Count, Product, Price)]
Run Code Online (Sandbox Code Playgroud)

定义一个函数mostExpensive,鉴于一项法案,将返回的产品名称和该法案的最昂贵的项目的总成本(考虑如何将产品的许多项目被买).假设只有一个这样的产品.

mhw*_*bat 6

Data.List,有一个叫做的函数maximumBy在这里很有用.它需要一个进行比较的功能.要编写该函数,我们将使用Data.Ord被调用的函数comparing.现在我们需要的是一种方法,说什么我们要比较.所以,如果我们定义:

calcPrice (k, _, p) = k*p
Run Code Online (Sandbox Code Playgroud)

然后我们可以使用以下结果获得结果

maximumBy (comparing calcPrice) items
Run Code Online (Sandbox Code Playgroud)

有了这个,我认为你可以解决问题.