为什么要执行更高阶的程序?

2023-11-24

因此,如果一种语言提供了更高阶的过程,那么我可以拥有返回过程的过程。就像是:

(define (Proc a b c)
  (lambda (x) ( #| method body here in terms of a b c and x |# )))

要创建新程序,我只需执行以下操作:

(define ProcA (Proc a1 b1 c1)) ; Would create ProcA that has 1 argument

类似的任务可以通过定义不支持高阶过程的语言来完成Proc需要 4 个而不是 3 个参数并调用此过程来定义ProcA, like:

(define (Proc a b c x) ( #| method body -- does not return any procedure |# )
(define (ProcA x) (Proc a1 b1 c1 x))

那么为什么高阶过程有这么多模糊之处呢?我错过了什么吗?


一个很好的观察是,返回另一个函数的函数与带有两个参数的函数是相同的。这称为“柯里化”。换句话说,从 A 到 B 的函数是逻辑蕴涵的证明,即 A 蕴涵 B,或者:

A => B.

正如您所注意到的,如果 A 暗示 B 暗示 C,则 A 和 B 暗示 C,或者:

(A => (B => C)) <==> ((A, B) => C)

但高阶函数不一定是返回另一个函数的函数。高阶函数是以另一个函数作为参数的函数。这是一个重要的区别,HOF 是非常强大的编程工具。

例如,考虑这个 Haskell 函数:

map :: (a -> b) -> [a] -> [b]
map f [] = []
map f (x:xs) = f x : (map f xs)

这个高阶函数需要一个函数f并将其应用于列表中的每个元素。在没有 HOF 的语言中,您可以使用循环或类似的东西来执行此函数所做的操作,但在具有 HOF 的语言中,您可以调用f对于列表中的每个元素,使用如下简单调用:

map f myList

当然,语言中的控制结构可以让你近似高阶函数,但是具有高阶函数的语言可让您发明自己的控制结构。方案当然符合条件。

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

为什么要执行更高阶的程序? 的相关文章

随机推荐

  • 如何在 SOLR 中索引文档?

    我在 Ubuntu 10 04 上运行 Solr 1 4 通过 apt get solr tomcat 安装 它似乎工作正常 不过 我很难找到有关如何索引文档的任何连贯信息 我是 SOLR 新手 所以请耐心等待 我有一个已安装的 Windo
  • 天蓝色资源管理器服务总线提供商?

    有 ServiceBus 提供商这样的东西吗 作为我的应用程序的一部分 我想包含 SB 命名空间 主题和订阅 您是否期望使用 ARM 部署网站 并使用服务接口来编写其他支持功能的脚本 现在有一个服务总线提供商 样本模板 apiVersion
  • 如果“&String”没有实现“Into”,为什么这些实现会发生冲突?

    我问了一个相关问题关于为什么没有实施From lt String gt for String 我现在想创建自己的特质 如下所示 derive Debug struct MyStruct String impl MyStruct fn new
  • 如何知道谷歌帐户是否在谷歌应用程序域下?

    我正在开发一个应用程序 允许用户将他们的云端硬盘文件分享给朋友 但是Google App帐户存在问题 例如 email protected 其中的文件不能与不在该域下的人共享 尽管共享策略可以由管理员更改somedomain com 但我不
  • 设置 Java 编译器合规级别

    我需要在命令行上编译一个Java程序 并且我试图将编译器级别设置为较低的级别 1 6 我尝试过这样但没有成功 javac 1 6 Hello java Use source and target选项 javac target 1 6 sou
  • 如何从对象数组中删除所有重复项?

    我有一个包含对象数组的对象 obj obj arr new Array obj arr push place here name stuff obj arr push place there name morestuff obj arr p
  • 无法在 Rider 中使用 .NET Standard 2.0 Lib 加载 Xamarin Forms 项目

    TL DR Rider 是否支持具有 NET Standard 库 2 0 的 Xamarin Forms 项目 我使用空白表单应用程序多平台向导在 Visual Studio 2017 3 Windows 中创建了一个小型 Xamarin
  • 将数字转换为日期[重复]

    这个问题在这里已经有答案了 我有一张表 其中一列的日期格式为20130109或无空格的 YearMonday 我正在尝试绘制这些点的图表 由于这种奇怪的间距 最终在图表中出现很大的间隙 因此想要将这些数字转换为日期 我一直在尝试使用as D
  • 从 nlme 摘要中提取随机效应

    我可以使用以下命令从 nlme 摘要中提取固定效果summary fm1 却苦于如何获得Random effects 部分 fm1 lt lme distance age Orthodont random age Subject summa
  • 如何在布局中使用自己的视图?

    我创建了一个这样的类 public final class MyView extends View public MyView Context context AttributeSet attrs super context attrs 然
  • 蟒蛇 |异步IO |类型错误:需要一个协程

    我正在尝试使用 asyncio 进行 python 协程编程 这是我的代码 import asyncio async def coro function return 2 2 async def get return await coro
  • 如何在 POSIX C 中枚举连接到一台机器的所有 IP 地址?

    背景 我正在编写一个建立传出 TCP IP 连接的守护程序 它将在具有多个 非环回 IP 地址的计算机上运行 我希望用户能够在守护程序的配置文件中指定用于传出连接的 IP 地址 或者 使用全部 这些地址将轮流使用 每个连接都从最近最少使用的
  • C++ 类中的重载运算符 <<

    我有一个使用结构的类 我想重载该结构的 typedef struct my struct t int a char c my struct class My Class public My Class friend ostream oper
  • 是否可以在 iOS 9 上将 iPad 应用程序设置为不进行多任务处理

    我有一个大型应用程序 需要一些时间来针对 iOS9 进行优化 编辑 我担心的是当应用程序窗口大小减小时 所有 UI 都会被挤在一起 所以我的问题是 有什么方法可以强制应用程序全屏显示吗 要为您的应用程序选择退出 禁用 多任务处理 选择您的目
  • Random.nextGaussian() 的问题

    Random nextGaussian 应该给出均值 0 和标准差 1 的随机数 它生成的许多数字都超出了 1 1 范围 我如何设置才能使其给出仅在 1到1范围内的正态分布随机数 均值为 0 标准差为 1 的高斯分布意味着分布的平均值为 0
  • 谷歌登录gapi未定义

    我正在尝试在我的网站上启用谷歌登录 该按钮有效 与我的帐户同步 但我无法从谷歌访问用户ID 这就是我的想法
  • jQuery 按类计数元素 - 实现此目的的最佳方法是什么?

    我想做的是计算当前页面中具有相同类的所有元素 然后将其添加到输入表单的名称中 基本上我允许用户单击 span 然后通过这样做为更多相同类型的项目添加另一个 但我想不出一种方法来简单地用 jQuery JavaScript 来计算所有这些 然
  • IllegalStateException 地图大小不应为 0 [重复]

    这个问题在这里已经有答案了 我有一个MapFragment显示地图 如果用户带着地图离开活动 或设备进入睡眠状态 然后回来onResume接到电话后 我将地图移回到标记处 但是当我移动相机时我遇到了异常 07 23 16 28 42 725
  • 使用 jQuery 删除文本

    有没有办法使用 jQuery 删除未包含在任何标签中的文本 p This is some text p This is unwrapped text to be removed span some more text span 感谢您的帮助
  • 为什么要执行更高阶的程序?

    因此 如果一种语言提供了更高阶的过程 那么我可以拥有返回过程的过程 就像是 define Proc a b c lambda x method body here in terms of a b c and x 要创建新程序 我只需执行以下