高阶函数有哪些有趣的用途?

2024-01-15

我目前正在学习函数式编程课程,我对高阶函数和一等公民函数的概念感到很有趣。然而,我还想不出许多实际有用的、概念上令人惊奇的或只是简单有趣的高阶函数。 (除了典型的、相当沉闷的map, filter等功能)。

您知道此类有趣函数的示例吗?

也许是返回函数的函数、返回函数列表的函数(?)等等。

我很欣赏 Haskell 中的例子,这是我目前正在学习的语言:)


好吧,您注意到 Haskell 没有 for 循环语法吗?不while or do or for。因为这些都只是高阶函数:

 map :: (a -> b) -> [a] -> [b]

 foldr :: (a -> b -> b) -> b -> [a] -> b

 filter :: (a -> Bool) -> [a] -> [a]

 unfoldr :: (b -> Maybe (a, b)) -> b -> [a]

 iterate :: (a -> a) -> a -> [a]

高阶函数取代了控制结构语言中内置语法的需要,这意味着几乎每个 Haskell 程序都使用这些函数——这使得它们非常有用!

它们是实现良好抽象的第一步,因为我们现在可以将自定义行为插入通用骨架函数中。

尤其,monads http://book.realworldhaskell.org/read/monads.html之所以可能,是因为我们可以链接在一起并操纵函数来创建程序。

事实上,当生活处于一阶状态时,它是相当无聊的。只有当你拥有更高的阶数时,编程才会变得有趣。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

高阶函数有哪些有趣的用途? 的相关文章

随机推荐

  • CSV 更改分隔符

    我正在读取 CSV 文件并将分隔符从 更改为 但是 我在我的数据 我无法控制 中注意到 在某些情况下 我有一些数据不想遵循此规则 并且它包含带有逗号的引用数据 我想知道如何最好地不替换这些异常 例如 ABSON TE Wick Lane A
  • 使用 MAMP 在 Mac OS 中通过终端连接到 MYSQLi

    我正在尝试通过 Mac 中的终端运行我的 PHP 脚本 当我尝试运行该脚本时 出现以下错误 警告 mysqli connect HY000 2002 没有这样的文件或目录 这就是我尝试连接的方式 mysqli connect localho
  • 使用 docker-composer 进行扩展并向主机名添加数字?

    我有一个docker compose yml master build slave image master hostname slave command run slave 我怎样才能使docker compose scale slave
  • 更新后反应输入光标移动到末尾

    当我更新输入字段中的值时 光标移动到字段的末尾 但我希望它保持在原来的位置 什么可能导致此问题
  • 使用WEKA时找出错误分类的实例

    我正在使用 WEKA 的 GUI 版本 并使用朴素贝叶斯进行分类 谁能告诉我如何找出哪些实例被错误分类 转到 Weka 资源管理器中的分类选项卡 单击更多选项 检查输出预测 Click OK 希望有帮助
  • 如何在 uitextfield 中显示 pickerview 而不是键盘?

    我想在成为 UITextfield 而不是键盘的 FirstResponder 时显示 UIPickerView 并在选择器视图的文本字段中填充值 有人知道吗 使用 textfield InputView uipickerView 替换系统
  • SmtpClient“由于数据包格式意外,握手失败”

    我使用 SmtpClient 发送电子邮件 代码如下 SmtpClient client new SmtpClient host 587 client EnableSsl true client Credentials new System
  • 如何从一个Windows控制台应用程序向另一个应用程序发送消息?

    我有一个启动子进程的 Windows 控制台应用程序 如何向子进程发送消息 我发现类似的功能PostMessage PeekMessage http msdn microsoft com en us library windows desk
  • Java 中缺失值

    Java中可以用什么语句来表示变量的缺失值 比如我想写一段代码 if a gt 23 income pay rate else income is missing 这个线程中有很多不好的建议 首先让我谈谈为什么你应该not采取一些建议的方法
  • 将 Golang JSON 存储到 Postgresql 中

    我想将某个结构存储到我的数据库中 其中有一个 JSON 字段 type Comp struct CompId int64 db comp id json comp id StartDate time Time db start date j
  • stack.yaml 文件和 .cabal 文件有何区别?

    我最近开始在为项目指定外部依赖项时使用 Haskell 堆栈 有时您将其放置在 cabal 文件中 而有时您将其放置在 yaml 文件中 我是否正确地认为 当您将其放入 cabal 文件中时 它只会在堆栈存储库中查找您的包 但是 当您将其放
  • Android SDK Manager 安装特定版本的 NDK Bundle

    我正在尝试安装 NDK 15c 但我似乎不知道如何告诉 sdkmanager 版本 如果我跑 sdkmanager ndk bundle 我会得到我不想要的最新的 我尝试了不同的组合 但没有任何效果 sdkmanager ndk bundl
  • Akka actor 查找或依赖注入

    我刚刚开始使用 Akka 我无法决定是否应该使用依赖注入 如蛋糕模式 或 actor 查找来将 actor 彼此解耦 首选方法是什么 您应该更喜欢向彼此介绍 Actor 这意味着在消息中发送 ActorRef 或与消息一起发送 或者将其传递
  • CouchDB 中的树

    我是 CouchDB 新手 有一个问题 我正在使用父消息的 ID 作为属性来保存消息 消息还可以有一个 childMessage 作为父级 因此它看起来像一棵树 我如何查询所有孩子 包括孩子的孩子 谢谢 这是处理分层数据时常用的方法 htt
  • Rails 如何优化我的网站?

    我想让我的网站更快 我知道我可以制作 CSS 精灵并压缩 HTML 和 CSS 还有其他方法可以优化页面速度吗 此页面就是一个示例 http www vinderhimlen dk konkurrencer vind elektronik
  • 如何防止 BeautifulSoup4 在汤中添加额外的 标签? [复制]

    这个问题在这里已经有答案了 在 BeautifulSoup 3 之前的版本中 我可以获取任何 HTML 块并通过以下方式获取字符串表示形式 from BeautifulSoup import BeautifulSoup soup3 Beau
  • 使用 PHP 确定本地文件的 Mime 类型(内容类型)

    我正在尝试确定文件的 mime 类型 我尝试了几种方法 但没有想出任何可以提供一致输出的方法 我试过了 mime mime content type file and mime exec file bi file 我正在提供图像 CSS 和
  • 如何在Qt5中播放声音(Qt4迁移)?

    在Qt4中我曾经使用过 QT multimedia phonon include
  • 安全性:我应该如何存储(“记住”)用户的用户名和密码以供将来使用?

    我需要我的应用程序能够记住用户的用户名和密码 以便用户将来不必再次输入 显然 为了 记住 用户名和密码以供将来使用 这意味着我的应用程序必须以某种方式将用户名和密码存储到磁盘 这通常是如何完成的 我知道 Pidgin 以纯文本形式存储用户名
  • 高阶函数有哪些有趣的用途?

    我目前正在学习函数式编程课程 我对高阶函数和一等公民函数的概念感到很有趣 然而 我还想不出许多实际有用的 概念上令人惊奇的或只是简单有趣的高阶函数 除了典型的 相当沉闷的map filter等功能 您知道此类有趣函数的示例吗 也许是返回函数