Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >教会数字

教会数字
EN

Code Review用户
提问于 2016-09-11 08:57:55
回答 1查看 464关注 0票数 3

以下是SICP的练习2.6:

练习2.6:在将成对表示为过程不够令人难以置信的情况下,考虑到在一种可以操作过程的语言中,我们可以通过实现0和加法1作为(定义为零(lambda (f) (lambda (x) x))(定义(add-1 n) (lambda (f) ) (lambda ( f ) (lambda (x) )(lambda(X)(f ((n )x)来实现0和加法1的运算,这样的表示称为教会数字,以其发明者Alonzo Church,发明λ微积分的逻辑学家。直接定义一和二(不是零和加-1)。(提示:使用替换来计算(加-1))。给出加法程序+的直接定义(而不是重复应用add-1)。

请检查我的代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  (define one (lambda (f) (lambda (x) (f x))))

  (define two (lambda (f) (lambda (x) (f (f x)))))

  ;; I used an identity function to check the + procedure
  (define (+ a b)
    (lambda (f)
      (lambda (x)
        ((((a f) b) f) x))))

如何改进这段代码?

EN

回答 1

Code Review用户

回答已采纳

发布于 2016-09-11 21:36:24

您的函数+不正确。

两个教会数字之和的定义如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
(define (plus a b)
  (lambda (f)
    (lambda (x)
      ((a f) ((b f) x)))))

(例如,参见维基百科)。

实际上,教会数字n可以定义为将给定函数fn倍应用于给定值x的函数。因此,在上述定义中,和(plus a b)首先将bf应用于x,而对于该结果,f被应用a倍。相反,在您的定义中,函数体内的应用程序类型是错误的。

如何检验教会数字及其功能的正确性?

您只需将教会数字应用于函数整数后继(即(lambda(x)(+ x 1)))和数字0,以确定它是否生成相应的“规则”数字。因此,例如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
(define (succ x) (+ x 1))   ;; here `+` is the integer addition, not your function!

((zero succ) 0)  ; produces 0
((one succ) 0)   ; produces 1  etc.

因此,您可以测试和是否正确:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
(((plus one two) succ) 0)  ; produces 3

如果您尝试您的函数,您会发现:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
(((+ one two) succ) 0) ; raises an error
票数 3
EN
页面原文内容由Code Review提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codereview.stackexchange.com/questions/141084

复制
相关文章
档案数字化管理平台如何选?新的技巧教会您
根据市场调查,确实目前有很多的数字档案管理平台,针对过多的选择,档案数字化管理平台怎么选?才适合我们呀!通常是从档案数字化管理平台系统的功能性、操作性、实用性、稳定性多方面综合考量分析!
用户7287033
2023/02/23
4630
档案数字化管理平台如何选?新的技巧教会您
马化腾教会我的
前面看了鞋狗,就是创始人的一本自传,写的是相当的精彩,有机会再跟你们说一说。这段时间刚把「腾讯传」看完了。下面继续看华为没有秘密,据说也挺有意思的。
谭庆波
2019/05/20
4800
如何教会老婆写 Python ?
code就就是一种语言,一种计算机能读懂的语言。计算机是一个傻逼,他理解不了默认两可的任何东西。比如,你让你老公去买个西瓜,你老公会自己决定去哪里买,买几个,找个搞活动打折的买,总之,你给他钱,他就给你买回来让你吃到爽的西瓜。但是,你想让计算机买一个西瓜?你要告诉他:去门口的鲜丰水果店买,买沙瓤无子西瓜,若旁边的店打折,就去旁边的店买。总之,你不能让计算机做任何决定,你要清楚的告诉他所有情况下的所有的行为。而code,就是你和计算机交流的语言,或者说是对计算机的命令。
IT派
2018/07/30
5340
如何教会老婆写 Python ?
如何教会机器读懂设计?
对于一个智能设计系统,有2个核心的能力,包括感知设计的能力、推理设计的能力。本文重点是机器感知设计能力的介绍。
mixlab
2019/11/13
3470
如何教会老婆写 Python ?
什么是code? code就就是一种语言,一种计算机能读懂的语言。计算机是一个傻逼,他理解不了默认两可的任何东西。比如,你让你老公去买个西瓜,你老公会自己决定去哪里买,买几个,找个搞活动打折的买,总之
小小科
2018/05/04
1.1K0
教会你何时定义领域服务
若遵循基于面向对象设计范式的领域驱动设计,并用以应对纷繁复杂的业务逻辑,则强调领域模型的充血设计模型已成为社区不争事实。我将Eric提及的战术设计要素如Entity、Value Object、Domain Service、Aggregate、Repository与Factory视为设计模型。这其中,只有Entity、Value Object和Domain Service才能表达领域逻辑。
张逸
2018/07/27
7140
如何教会机器读懂设计 v1.1
hi,大家好~我是shadow,一枚设计师/全栈工程师/算法研究员,目前主要研究方向是人工智能写作和人工智能设计,当然偶尔也会跨界到人工智能艺术,其他各种AI产品。
mixlab
2019/11/24
5580
我们可以教会机器人道德吗?
译者:Amber LI 本文长度为3524字,预估阅读时间7分钟。 引言:我们并不习惯关于机器做道德决定的想法,但它们能自己进行常规道德决定的那天正在逐步逼近。来自BBC的David Edmonds不禁发问,我们该如何教会它们做出正确的决定呢? 轿车按照原定时间在早上8点停在你家旁的路口等待接你上班。你坐进后座,从公事包中拿出电子阅读器扫描新闻。这趟行程从未遇到麻烦,之前最多只是略微塞车而已。但今天不寻常的可怕的事情发生了:两个小孩,互相追逐着从长满草的河岸滑落到你面前的马路上。已经没有时间刹车。而如果轿
iCDO互联网数据官
2018/03/05
8390
我们可以教会机器人道德吗?
手把手教会你安装Linux系统
可惜已不在
2024/10/17
810
手把手教会你安装Linux系统
快速教会你,虚拟机如何上网
如果刚开始查看就没有网关,则不用操作上面的步骤,接下来查看的网关是连着网(wifi)的ip
全栈程序员站长
2022/08/31
4540
手把手教会你小程序登录
首先大家看到这张图,肯定会注意到小程序进行通信交互的不止是小程序前端和我们自己的服务端,微信第三方服务端也参与其中,那么微信服务端在其中扮演着怎样的角色呢?我们一起来串一遍登录鉴权的流程就明白了。
JoanLiu
2018/11/15
3.3K1
编程教会我的6个生活信条
我见过不少程序员不敢尝试新技术,空有好的idea却从不去实施。他们不是懒,而是“完美主义”,永远解释自己能力不够、没想好、准备中...
朱卫军 AI Python
2022/12/20
2970
教会你使用AI绘画利器Stable Diffusion
作者:corey 随着 stable-diffusion 的开源,让更多人有机会直接参与到 AI 绘画的创作中,相关的教程也如雨后春笋般的出现。可是目前我看到的教程同质性较高,通常只能称作为"使用流程讲解",但是通常没有对其原理和逻辑进行深入说明。 所以本文的目的,是用尽可能少的废话,给大家补充一些重要的相关知识。对于"怎么用"这类的问题,通常有别人已经讲解过,我就不会过多赘述(而是贴一个教程链接,请读者自己学习)。如果你想了解更多关于"是什么"、"为什么"的问题,那么本文将会给你更多的解答,尽可能让读者做
腾讯技术工程官方号
2023/04/29
3.3K0
教会你使用AI绘画利器Stable Diffusion
10分钟教会你看懂top
后端们最怕的事情之一就是服务器的负载突然飙升,这可能又意味着一个个夺目Call马上要打过来了。碰到这种情况怎么办,大家第一反应一定是登陆到服务器上,先敲一个top命令看看Load Average吧。今天这篇文章和大家说说怎么看这个“Load Average”。
昱良
2021/02/09
1.8K0
10张图片教会你配置ipsec vpn
跨地区联网办公最经济实惠的方式,莫过于ipsec vpn,笔者此前也不止一次地写过ipsec vpn的配置方法,但是总有网友说太复杂了,今天我非要给各位看官来个简单版的教程,只用10张图片,就能展示华为防火墙配通外网,并且配通总部与分支机构的ipsec vpn。
IT狂人日志
2023/12/14
7630
10张图片教会你配置ipsec vpn
一文教会你单向链表
创建节点是一个很重要的函数,在插入函数中需要使用。在函数中创建节点,我们就不能够像之前一样直接创建了,众所周知,在函数上创建节点出了函数就会自动销毁,为了避免节点被自动销毁,这里采用malloc的方式创建节点,别忘了在头文件中引用函数
大海里的番茄
2024/01/19
1490
一文教会你单向链表
手把手教会你 Jenkins 备份与恢复
Jenkins 是一个 Java 语言编写的开源工具,结合持续集成与持续交付相关技术的运用可提升软件开发过程的自动化水平。
LinuxSuRen
2020/05/19
2.5K0
手把手教会你 Jenkins 备份与恢复
教会AI认识麻将牌之实践篇
说起打麻将我一直是处于比较业余并且不思进取的水平,各个地方的麻将规则不一,繁琐的规则也懒得放脑袋里记忆了,于是每次跟朋友打麻将都是现场临时约定规则,怎么简单怎么来,周边也有不少年轻的小伙伴我一样。
曲奇泡芙
2020/06/23
2.7K0
如何用六点教会老婆写 Python ?
code就就是一种语言,一种计算机能读懂的语言。计算机是一个傻逼,他理解不了默认两可的任何东西。比如,你让你老公去买个西瓜,你老公会自己决定去哪里买,买几个,找个搞活动打折的买,总之,你给他钱,他就给你买回来让你吃到爽的西瓜。但是,你想让计算机买一个西瓜?你要告诉他:去门口的鲜丰水果店买,买沙瓤无子西瓜,若旁边的店打折,就去旁边的店买。总之,你不能让计算机做任何决定,你要清楚的告诉他所有情况下的所有的行为。而code,就是你和计算机交流的语言,或者说是对计算机的命令。
JavaQ
2018/07/25
4240
1 分钟教会你用 Spring Boot 发邮件
Spring Boot 提供了一个 starter,并能自动配置,下面来做个小例子,顺便解析它做了什么工作。
Java技术栈
2018/12/05
5770

相似问题

获取数字除以该数字的数字的计数。

20

数字到罗马数字

30

数字改为罗马数字

20

检查数字中的数字

10

数字到向量的数字

20
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

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

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文