Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
List Haskell:比较元组列表中的元素_List_Haskell_Comparison_Tuples - Fatal编程技术网

List Haskell:比较元组列表中的元素

List Haskell:比较元组列表中的元素,list,haskell,comparison,tuples,List,Haskell,Comparison,Tuples,项目说明: 如果给定了一个包含5个元素元组的列表(例如,[(String,Int,String,Int,Int)]),那么元组的第一个元素表示工人的姓名,第四个元素表示他/她的工资支票,我必须创建一个函数(称为biggestPay)来给出工资最高的工人的姓名 限制: 根据《学好哈斯克尔》一书,我只能使用(包括)高阶函数和前奏函数 我迄今为止的作品: getPay :: (String,Int,String,Int,Int) -> Int getPay (_,_,_,a,_) = a g

项目说明:

如果给定了一个包含5个元素元组的列表(例如,
[(String,Int,String,Int,Int)]
),那么元组的第一个元素表示工人的姓名,第四个元素表示他/她的工资支票,我必须创建一个函数(称为
biggestPay
)来给出工资最高的工人的姓名

限制:

根据《学好哈斯克尔》一书,我只能使用(包括)高阶函数和前奏函数

我迄今为止的作品:

getPay :: (String,Int,String,Int,Int) -> Int
getPay (_,_,_,a,_) = a 

getName ::(String,Int,String,Int,Int) -> String
getName (a,_,_,_,_) = a

getPayList :: [(String,Int,String,Int,Int)] -> String
getPayList [] = [] 
getPayList xs = [ x | y <- [0..(length xs)-1] , 
    if getPay(getPayList y:xs) >= getPay(getPayList (y+1):xs) 
    then x is getName(getPayList y:xs) 
    else x is getName(getPayList (y+1):xs)]

biggestPay :: [String] -> String
biggestPay [] = []
biggestPay xs = drop ((length xs) -1) xs

x是…
不是有效的Haskell语法,但您可以像这样使用
let

getPayList (x:xs) = [ x | y <- [...]
                        , let x = if ... then ... else ... ]
Haskell将其解释为

getPay( (getPayList y) : xs)
它不进行类型检查,因为y是整数,
getPayList
对元组列表进行操作

提示

看看LYAH如何引入最大值功能:


也许该函数有一个简单的调整,它将为您提供
biggestPay
函数。

Hum我似乎无法理解该调整,但例如,如果我首先使用getName从工作中删除所有名称,则它们将使用getPay删除所有工资支票,然后使用列表上的最大值(使用getPay创建)包含所有的工资单,获取该号码的索引,然后返回具有相同索引的姓名,这样做有效吗?或者我把事情搞得太复杂了?如果你只是更改我标记为“更改这行”的那一行,你将拥有一个函数
[(String,Int,String,Int,Int)]->(String,Int,String,Int,Int)
,它返回报酬最大的元组。
是什么意思?
getPay(getPayList y:xs)
getPay( (getPayList y) : xs)
maximum' :: (Ord a) => [a] -> a  
maximum' [] = error "maximum of empty list"  
maximum' [x] = x  
maximum' (x:xs)   
    | x > maxTail = x             -- change this line
    | otherwise = maxTail  
    where maxTail = maximum' xs