首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >为什么选择更高阶的过程?

为什么选择更高阶的过程?
EN

Stack Overflow用户
提问于 2009-05-06 18:44:38
回答 8查看 1.5K关注 0票数 5

因此,如果一种语言提供了更高阶的过程,那么我可以让过程返回过程。类似于:

代码语言:javascript
运行
AI代码解释
复制
(define (Proc a b c)
  (lambda (x) ( #| method body here in terms of a b c and x |# )))

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

代码语言:javascript
运行
AI代码解释
复制
(define ProcA (Proc a1 b1 c1)) ; Would create ProcA that has 1 argument

类似的任务可以在不支持高阶过程的语言中完成,方法是定义采用4个参数而不是3个参数的Proc,并调用此过程来定义ProcA,如下所示:

代码语言:javascript
运行
AI代码解释
复制
(define (Proc a b c x) ( #| method body -- does not return any procedure |# )
(define (ProcA x) (Proc a1 b1 c1 x))

那么为什么高阶过程有这么多模糊的东西呢?我是不是遗漏了什么?

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2009-05-06 19:36:38

这是一个很好的观察,一个返回另一个函数的函数与一个接受两个参数的函数是相同的。这就是所谓的"Currying“。换句话说,从A到B的函数是逻辑蕴含的证明,即A暗示B,或者:

代码语言:javascript
运行
AI代码解释
复制
A => B.

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

代码语言:javascript
运行
AI代码解释
复制
(A => (B => C)) <==> ((A, B) => C)

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

例如,考虑以下Haskell函数:

代码语言:javascript
运行
AI代码解释
复制
map :: (a -> b) -> [a] -> [b]
map f [] = []
map f (x:xs) = f x : (map f xs)

这个高阶函数接受一个函数f,并将其应用于列表中的每个元素。在没有HOFs的语言中,你可以使用循环或类似的东西来做这个函数,但是在有HOFs的语言中,你可以通过一个简单的调用为列表中的每个元素调用f,如下所示:

代码语言:javascript
运行
AI代码解释
复制
map f myList

当然,语言中的控制构造允许您近似高阶函数,但具有高阶函数的语言允许您发明自己的控制构造。方案当然是合格的。

票数 10
EN

Stack Overflow用户

发布于 2009-05-06 19:24:01

我不想在这里重述这个论点,但在Why Functional Programming Matters中,John Hughes认为高阶函数是有用的,因为它们提供了更有效的方法来“粘合”程序的各个部分,从而使代码更容易重用。这些示例是用一种不再经常使用的非常古老的语言编写的,但它们仍然很容易理解,并且非常令人信服。阅读John的论文是一个很好的方法,可以详细回答你的问题“为什么高阶程序有这么多模糊的东西”。

票数 3
EN

Stack Overflow用户

发布于 2009-05-06 18:47:47

这更多的是关于心态而不是可行性。它允许您将函数视为一等公民,并根据对函数进行操作的函数来创建其他函数,等等。

显然,你可以用其他语言来做或模拟这一点,但如果它不是一种语法机制,它就会被视为一种添加或黑客攻击。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/832668

复制
相关文章
高阶面试:伯努利过程
17世纪法国有个富二代叫洛必达,师从著名数学家约翰·伯努利。洛必达的愿望是成为一名数学家,但是天资不好,在班上成绩一直倒数。当听说老师伯努利正准备结婚但还差点钱时,他写了封信给伯努利表示想重金买他的论文,此时缺钱的伯努利笑开了花。论文发布后洛必达一夜成名,论文就是著名的《洛必达法则》。洛必达死后,伯努利觉得卖亏了,于是把当时的交易信息公布出来,但命名已无法改回。当下每天都有人在课堂上悼念洛必达,不过今天的主角是伯努利。
sibenx
2020/08/18
9330
高阶面试:伯努利过程
为什么更希望在开发过程中出现需求变更?
在项目开发过程中,项目经理拿到客户需求待办事项后,架构人员开始针对客户功能做架构设计,产品人员针对需求列表做产品原型设计,开发人员根据架构和原型开始做系统概要设计,详细等等设计,测试人员需要写测试用例,开发、提交测试、验收......
用户5166556
2019/11/28
7180
使用高阶函数:让你的 JS 代码更牛更有范
首先,高阶函数的确切含义是:比典型函数更高的抽象级别。它是对其他函数执行操作的函数。在此定义中,操作可能意味着将一个或多个函数作为参数,或者将一个函数作为结果返回。 你不必同时做这两个事情。进行一项或多项操作即可将功能视为高阶功能。
前端修罗场
2022/07/29
5410
为什么HTTPS更安全
“为什么HTTPS更安全”是面试中经常被问到的题目,也是Web开发人员必备的知识。
windealli
2022/11/14
3770
为什么HTTPS更安全
为什么选择 TypeScript
相信经常关注前端技术的同学对 TypeScript 应该不陌生,或多或少看过一些关于 TypeScript 的文章。
陈皮皮
2020/06/28
1.7K0
为什么选择SaaS?
我自诩为工程师,喜欢造各种各样的“轮子”。喜欢钻研问题,有时候Debug到第三方库,索性直接把库里面的函数给改了,个性化成自己想要的样子。但是后来发现一个问题,不仅这些轮子需要我去维护,而且当第三方库有了重大更新,我还要想办法手动同步更新。事情逐渐就变得不那么好玩了,每天还有其它重要的事情要做,不能总耗费在这些边边角角的事情上!
Fundebug
2020/01/02
7440
不用 Notepad++,还有更牛逼的选择!
来源:oschina.net/news/110987/no-notepad-plus-plus
Java技术栈
2019/11/04
1.7K0
不用 Notepad++,还有更牛逼的选择!
为什么选择 HarmonyOS?
HarmonyOS 是一款面向未来、面向全场景(移动办公、运动健康、社交通信、媒体娱乐等)的全新分布式操作系统。与大型公司用于不同类型的电子产品的其他操作系统不同,HarmonyOS可以适应不同的设备和场景。因此,你最终将获得一个操作系统,该操作系统旨在跨设备使用。而不是把所有东西都放在同一个地方。
海拥
2022/10/31
2380
为什么选择 HarmonyOS?
为什么选择Mapabc
目前网络上有众多的在线电子地图服务,诸如Mapabc、Google Maps、Yahoo Maps、Mapbar、Microsoft Virtual Earth Maps、51地图等等。使用这些开放的API,地图应用的开发者和爱好者们可以非常方便的调用在线地图服务提供的各种资源、实现各种各样的地图第三方应用。
大江小浪
2018/07/25
9380
为什么选择Django?
Python作为当前最火爆最热门,也是最主要的Web开发语言之一,在其二十多年的历史中出现了数十种Web框架,比如Django、Tornado、Flask、Twisted、Bottle和Web.py等,它们有的历史悠久,有的发展迅速,还有的已经停止维护。
萌海无涯
2019/08/26
1.1K0
为什么选择Django?
mysql存储过程---选择结构
关键字DECLARE,下列语句声明变量名为num的int类型的变量长度为10,[ default 0 代表默认值为0,可以不写]。
用户5899361
2020/12/07
9390
Vue高阶组件_高阶组件的承上启下
何谓高阶组件?类比高阶函数的定义:将函数作为参数的函数就是高阶函数,那么,将组件作为参数的组件就是高阶组件。
全栈程序员站长
2022/11/18
4820
Vue高阶组件_高阶组件的承上启下
实用主义:前端IDE选择从入门到高阶
前言 前端的开发工具称为IDE不太准确,准确的说法应该是文本编辑器,因为HTML和CSS都只是解释性语言,javascript也是在运行时编译。但是随着前端技术的突飞猛进,传统的文本编辑器已经不再适合
MrTreasure
2018/05/10
1.5K0
为什么选择智能电视?
近年来,彩电业开始从规模竞争转向结构竞争,并向生态系统竞争转变。为什么会如此?凡需要获取信息显示的地方,都有视像显示屏存在,伴随者屏幕技术、应用操作系统、应用兼容及创新等发展,电视开始迈向了进化为智能电视的道路。
火爆的小茶壶
2022/07/27
7590
为什么选择智能电视?
为什么选择使用 TypeScript ?
相信经常关注前端技术的同学对 TypeScript 应该不陌生,或多或少看过一些关于 TypeScript 的文章。
陈皮皮
2020/07/10
2.4K0
为什么选择多云?为什么是现在?
由于人们在过去几年看到的风险,组织不断扩大其云采用。尽管云计算解决了许多令企业用户头痛的问题,但它并不能免除许多其他责任,其中包括数据安全,应用程序安全,以及遵守地区法律等。 这就是为什么云计算变得越
静一
2018/06/08
6560
为什么选择 Traefik Ingress ?
在解析此概念之前,我们回顾下 Kubernetes 生态组件 Ingress Controller (中文释义:入口控制器)的概念。
Luga Lee
2021/11/21
2.9K0
为什么选择 Traefik Ingress ?
1.2为什么选择Arduino
市面上的开发板有很多,比51单片机、树莓派、MCU开发板等等,但是为什么要选择Arduino呢?一句话总结,其实用Arduino进行开发的优势很明显。
喵叔
2020/09/08
7240
为什么HTTPS比HTTP更安全?
近几年,互联网发生着翻天覆地的变化,尤其是我们一直习以为常的HTTP协议,在逐渐的被HTTPS协议所取代,在浏览器、搜索引擎、CA机构、大型互联网企业的共同促进下,互联网迎来了“HTTPS加密时代”,HTTPS将在未来的几年内全面取代HTTP成为传输协议的主流。
coder_koala
2019/07/30
4380
为什么HTTPS比HTTP更安全?
点击加载更多

相似问题

方案:高阶过程和递归

10

为什么我的迭代高阶过程比我的等价递归过程提供更精确的结果?

11

高级切片。高阶切片/选择

132

在方案中以高阶过程访问输入

22

高阶li的CSS选择器

44
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档