List 计算列表列表中每个列表的最大值

List 计算列表列表中每个列表的最大值,list,haskell,max,List,Haskell,Max,如何在Haskell中定义一个函数,该函数获取一个双精度列表,并使用map返回每个列表的最高值 这样:func4[[2,4],[4,7],[7,9]=[4,7,9] 我试着用很多方法去做,但都错了。是否可以执行此操作 func4 [[x,y]] = map maximum [x,y] 及 func4[[x,y]]=[xs | xs它不起作用的原因是func4期望——就像你自己说的那样——一个列表。因此[[x,y]]是一个列表。这意味着[x,y]是一个项目列表。您无法确定x和y是可以计算最大值的

如何在Haskell中定义一个函数,该函数获取一个双精度列表,并使用
map
返回每个列表的最高值

这样:
func4[[2,4],[4,7],[7,9]=[4,7,9]

我试着用很多方法去做,但都错了。是否可以执行此操作

func4 [[x,y]] = map maximum [x,y]


func4[[x,y]]=[xs | xs它不起作用的原因是
func4
期望——就像你自己说的那样——一个列表。因此
[[x,y]]
是一个列表。这意味着
[x,y]
是一个项目列表。您无法确定
x
y
是可以计算
最大值的列表(即使这样做有效,也不正确)

您只需省略
[[x,y]]
模式,然后使用
l
(列表列表),如:

如果要求每个列表只包含两个元素,您还可以使用:

func4 :: Ord b => [[b]] -> [b]
func4 = map (\[x,y] -> max x y)
func4::Ord b=>[[b]]->[b]
func4=map(\[x,y]->max x y)

在这里,您对项目进行模式匹配,它必须是一个包含两个元素的列表
x
y
,然后在
max x y
map
。如果必须映射一个不包含两个元素的列表,此函数将出错。
\[x,y]->max x y
被称为lambda表达式。

它就像func4[[2,4],[4,7],[7,9]->[4,7,9]你真的需要一个可折叠的t
类型定义,还是只要
[[b]
就足够了,就像
Ord b=>[b]->[b]
?@Redu:最通用的类型签名是
可折叠t
,但我想使用
[[b]]确实更好
在这里,因为
可折叠
比我猜的列表更难理解。嗯……我只是好奇列表以外的其他类型会有什么好处。这是我的局限:)@Redu:
可折叠
的优点是,人们可以使用例如二叉树,使其可折叠,然后我们可以计算最大值通常使用类型类是个好主意(尽管这只是我自己的经验)。
func4 :: Ord b => [[b]] -> [b]
func4 l = map maximum l
-- with eta-reduction

func4 :: Ord b => [[b]] -> [b]
func4 = map maximum -- look mom... no variables
func4 :: Ord b => [[b]] -> [b]
func4 = map (\[x,y] -> max x y)