list - 使用 foldr 和 lambda 表达式作为其第一个参数
问题描述
我试图弄清楚如何使用 lambda 表达式,我发现它们通常用于 foldl 或 foldr 等函数中。
我想知道为什么以下代码不起作用:
ExMin = foldr (\x y -> x < y) 5 [1,2,3,4]
我希望这个函数给我列表中的最小数字,但是它给出了错误。我在想它出错的原因是因为 x < y 返回一个布尔值,而我期望它是一个整数。
关于如何让它正确返回数字的任何想法?
解决方案
我想知道为什么以下代码不起作用:
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]
推荐阅读
- browser-cache - 有什么方法可以使用 appium python 清除缓存并从 android 释放空间?
- php - 代理后面的 docker 容器中的 shibboleth SP 问题
- jdbc - 什么是 MaxOpenPreparedStatements for DBCP for BasicDataSource 的最佳值
- vuejs2 - 赛普拉斯文件上传错误与 cypress-file-upload
- javascript - 从 chrome 扩展中获取数据
- java - 打开安卓的闹钟功能?
- authentication - 使用 OpenId Connect 进行 Apple 身份验证后出现 404 错误
- python - 试图运行 make 命令,但得到了这个错误
- xcode - 如何在持续集成中对 macOS 应用程序进行代码签名
- php - Laravel 多表认证未登录