scheme3.1.1 局部状态变量

通过改变局部变量,我们可以完成一些需要改变状态的操作。例如,我们可以设计一个收支系统,对某一账户内的金额进行增加和提取。
初始系统:

点击查看代码
#lang racket
(define (make-account balance)(define (withdraw amount)(if (>= balance amount)(begin (set! balance (- balance amount))balance)"Insuffcient funds"))(define (deposit amount)(set! balance (+ balance amount)) balance)(define (dispatch m)(cond ((eq? m 'withdraw) withdraw)((eq? m 'deposit) deposit)(else (error "Unknown request--Make account" m))))dispatch)
练习3.1 制作一个累加器
点击查看代码
(define (make-accumulator result)(lambda (amount)(begin (set! result (+ result amount)) result)))
------------------------------------------------------------------------
(define A (make-accumulator 10))
> (A 10)
20
> (A 20)
40
练习3.2 制作一个程序调用次数的计数器
点击查看代码
(define (make-monitored f)(let ((count-call 0))(define (do-call args)(set! count-call (+ count-call 1))(apply f args))(define (dispatch . args)(if (= (length args) 1)(cond ((eq? 'how-many-calls? (car args)) count-call)((eq? 'reset-count (car args)) (set! count-call 0))(else (do-call args)))(do-call args)))dispatch))
------------------------------------------------------------------------------------------(define S (make-monitored sqrt))
> (S 100)
10
> (S 'how-many-calls?)
1

练习3.3 修改make-account,创建一种带密码的账户

点击查看代码
(define (make-great-account balance password)(define (withdraw amount)(if (>= balance amount)(begin (set! balance (- balance amount))balance)("余额不足!")))(define (deposit amount)(begin (set! balance (+ balance amount)) balance))(define (incorrect-password . args)(display "密码错误!"))(define (dispath try-password m)(if (eq? try-password password)(cond ((eq? m 'withdraw) withdraw)((eq? m 'deposit) deposit)(else (error "Unknown request--Make account" m)))(incorrect-password)))dispath)
-----------------------------------------------------------------------------------------
(define A1 (make-great-account 1000 'right-ps))
> ((A1 'wrong-ps withdraw) 50)
密码错误!
> ((A1 'right-ps 'withdraw) 50)
950

练习3.4 修改带密码的账户,当被不正确的密码访问7次,则会报警

点击查看代码
(define (make-policed-account balance password)(let ((wrong-count 0))(define (withdraw amount)(if (>= balance amount)(begin (set! balance (- balance amount))balance)("余额不足!")))(define (deposit amount)(begin (set! balance (+ balance amount)) balance))(define (incorrect-password . args)(set! wrong-count (+ wrong-count 1))(display "密码错误!"))(define (wrong-call . args)(if (>= wrong-count 6)(display "called the polices")(incorrect-password)))(define (dispatch try-password m)(if (eq? try-password password)(cond ((eq? m 'withdraw) withdraw)((eq? m 'deposit) deposit)(else (error "Unknown request -- Make policed account" m)))(wrong-call)))dispatch))-------------------------------------------------------------------------------------------------
> (define A2 (make-policed-account 1000 'right-ps))
> ((A2 'wrong-ps 'withdraw) 50)
密码错误!
> ((A2 'wrong-ps 'withdraw) 50)
密码错误!
> ((A2 'wrong-ps 'withdraw) 50)
密码错误!
> ((A2 'wrong-ps 'withdraw) 50)
密码错误!
> ((A2 'wrong-ps 'withdraw) 50)
密码错误!
> ((A2 'wrong-ps 'withdraw) 50)
密码错误!
> ((A2 'wrong-ps 'withdraw) 50)
called the polices
> ((A2 'right-ps 'withdraw) 50)
950

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1201974.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

机器学习模型部署需超越聚合指标评估

MIT研究人员发现,当机器学习模型应用于训练数据之外的新数据时,会出现重大失效问题,这表明在新环境中部署模型时需要进行充分测试。"我们证明了即使在大量数据上训练模型并选择最佳平均模型,在新环境中这个最佳模型可能对6%-…

如何直接编辑Github的Readme.md文件

GitHub的markdown语法在标准的markdown语法基础上做了扩充,称之为GitHub Flavored Markdown。简称GFM。https://github.com/guodongxiaren/README GitHub的markdown语法在标准的markdown语法基础上做了扩充,称之为Gi…

(新卷,200分)- 区间交叠问题(Java JS Python)

(新卷,200分)- 区间交叠问题(Java & JS & Python)题目描述给定坐标轴上的一组线段,线段的起点和终点均为整数并且长度不小于1,请你从中找到最少数量的线段,这些线段可以覆盖柱所有线段。输入描述第一行输入为所…

(新卷,200分)- 区块链文件转储系统(Java JS Python)

(新卷,200分)- 区块链文件转储系统(Java & JS & Python) 题目描述 区块链底层存储是一个链式文件系统,由顺序的N个文件组成,每个文件的大小不一,依次为F1,F2,...,Fn。随着时间的推移,所占存储会越…

JVM(Java虚拟机) - 教程

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

(新卷,200分)- 任务调度(Java JS Python)

(新卷,200分)- 任务调度(Java & JS & Python)题目描述现有一个CPU和一些任务需要处理,已提前获知每个任务的任务ID、优先级、所需执行时间和到达时间。 CPU同时只能运行一个任务,请编写一个任务调度程序,采用“…

全网最全9个AI论文软件,本科生毕业论文必备!

全网最全9个AI论文软件,本科生毕业论文必备! AI 工具如何成为论文写作的得力助手 随着人工智能技术的不断进步,AI 工具在学术写作中的应用越来越广泛。对于本科生而言,撰写毕业论文是一项既重要又充满挑战的任务。而 AI 工具的出现…

(新卷,200分)- 上班之路(Java JS Python)

(新卷,200分)- 上班之路(Java & JS & Python)题目描述Jungle 生活在美丽的蓝鲸城,大马路都是方方正正,但是每天马路的封闭情况都不一样。 地图由以下元素组成: 1)”.” — 空地,可以达到…

【课程设计/毕业设计】基于springboot的小区蔬菜水果商城系统蔬菜超市系统【附源码、数据库、万字文档】

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

Java计算机毕设之基于Springboot的生鲜超市管理系统基于springboot的蔬菜超市系统(完整前后端代码+说明文档+LW,调试定制等)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

day166—递归—多边形三角剖分的最低得分(LeetCode-1039)

题目描述你有一个凸的 n 边形,其每个顶点都有一个整数值。给定一个整数数组 values ,其中 values[i] 是按 顺时针顺序 第 i 个顶点的值。假设将多边形 剖分 为 n - 2 个三角形。对于每个三角形,该三角形的值是顶点标记的乘积,三角…

(新卷,200分)- 数字加减游戏(Java JS Python)

(新卷,200分)- 数字加减游戏(Java & JS & Python) 题目描述 小明在玩一个数字加减游戏,只使用加法或者减法,将一个数字s变成数字t。 每个回合,小明可以用当前的数字加上或减去一个数字。 现在有两种数字可以…

ThinkPHP框架学习全攻略

好的,学习 ThinkPHP(TP)框架可以遵循以下系统化的路线: 1. 基础准备 环境搭建:安装 PHP(建议 7.4)、MySQL/MariaDB、Composer(依赖管理工具)。框架安装:通过…

Java毕设选题推荐:基于SpringBoot生鲜商城系统基于springboot的蔬菜超市系统【附源码、mysql、文档、调试+代码讲解+全bao等】

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

Java毕设项目:基于springboot的蔬菜超市系统(源码+文档,讲解、调试运行,定制等)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

(新卷,200分)- 探索地块建立(Java JS Python)

(新卷,200分)- 探索地块建立(Java & JS & Python) 题目描述 给一块n*m的地块,相当于n*m的二维数组,每个元素的值表示这个小地块的发电量; 求在这块地上建立正方形的边长为c的发电站,发电量满足目…

Nacos CVE-2021-29442

CVE-2021-29442 是 Nacos 中一个认证绕过 远程代码执行(RCE) 的高危漏洞,主要影响 Nacos 1.4.1 及以下版本,漏洞的核心原因是: Nacos 默认的鉴权实现存在逻辑缺陷,攻击者可以通过构造特殊的 HTTP 请求头绕…

(新卷,200分)- 去除多余空格(Java JS Python)

(新卷,200分)- 去除多余空格(Java & JS & Python)题目描述去除文本多余空格,但不去除配对单引号之间的多余空格。给出关键词的起始和结束下标,去除多余空格后刷新关键词的起始和结束下标。条件约束: 1&#xf…

IP地址与端口号

IP地址及编址方式 IP地址基础概念 IP地址的本质 定义:用于唯一标识互联网上设备的逻辑地址结构:采用两级结构(网络号 主机号)唯一性:在整个互联网范围内是唯一的表示方法:点分十进制记法(如…

制造业七大核心系统盘点——ERP、MES、WMS、SCM、PLM、SCADA、QMS

我这几年跑工厂、聊老板、跟信息化负责人沟通,听到最多的一句话不是我们没系统,而是:ERP 上了,车间还是一团乱MES 买了,数据没人信仓库有系统,库存还是对不上系统一堆,但问题一个没少这时候很多…