首页 > 解决方案 > 使用 foldr 和 lambda 表达式作为其第一个参数

问题描述

我试图弄清楚如何使用 lambda 表达式,我发现它们通常用于 foldl 或 foldr 等函数中。

我想知道为什么以下代码不起作用:

ExMin = foldr (\x y -> x < y) 5 [1,2,3,4]

我希望这个函数给我列表中的最小数字,但是它给出了错误。我在想它出错的原因是因为 x < y 返回一个布尔值,而我期望它是一个整数。

关于如何让它正确返回数字的任何想法?

标签: listhaskelllambda

解决方案


我想知道为什么以下代码不起作用:

ExMin = foldr (\x y -> x < y) 5 [1,2,3,4]

因为 foldr 函数采用类型为“累加器”类型的折叠函数,a -> b -> b所以b从右到左传递的值每次都作为折叠函数和另一个元素的输入。最终foldr返回累加器的最终值。

关于如何让它正确返回数字的任何想法?

是的,您可以使用该min :: Ord a => a -> a -> a功能。这将每次返回累加器和一个元素的最小值:

ExMin = foldr min 5 [1,2,3,4]

正如@amalloy 所说,您不能使用以大写开头的变量这应该是小写:

exMin = foldr min 5 [1,2,3,4]

推荐阅读