热门标签 | HotTags
当前位置:  开发笔记 > 前端 > 正文

为什么make-counter过程包含两个lambda定义?

如何解决《为什么make-counter过程包含两个lambda定义?》经验,为你挑选了1个好方法。

我正在试图理解制造计数器程序的方案代码.这是一个更高阶的程序(程序输出另一个程序),我坚持下去.

(define make-counter
  (lambda (n)
    (lambda () 
      (set! n (+ n 1))
      n)))

(define ca (make-counter 0))
(ca)
(ca)

它按预期分别输出1和2.为什么我们需要2个嵌套程序?它们的功能分别是什么?

如果有人详细解释,我将不胜感激.谢谢你们.



1> coredump..:

正确缩进,这是:

(define make-counter
  (lambda (n)
    (lambda ()
      (set! n (+ n 1))
      n)))

顺便说一下,您可以使用不同的语法:

(define (make-counter n)
  (lambda ()
    (set! n (+ n 1))
    n))

make-counter是一个接受数字n并返回一个名为closure的对象的函数,该对象的作用类似于函数但包含一个状态.不同的调用 make-counter会产生不同的闭包,即使n在论证中给出相同的闭包.在您进行实验时,可以使用函数调用语法调用闭包.

当您调用闭包时,将执行其中包含的代码.在您的示例中,闭包接受零参数,并更改名为的变量n.同样,从n值到绑定的绑定对于闭包是本地的,对于所有计数器实例都是不同的.但在特定计数器内部,n始终引用相同的内存位置.

set!函数的调用会更改n求值的内容,并将前一个值替换为(+ n 1)递增本地计数器变量.


推荐阅读
  • 本文探讨了在使用Azure Active Directory进行用户身份验证时,结合AddAuthentication和RequireAuthenticatedUser的必要性及其潜在冗余问题。 ... [详细]
  • 本文详细介绍了在使用 SmartUpload 组件进行文件上传时,如何正确配置和查找文件保存路径。通过具体的代码示例和步骤说明,帮助开发者快速解决上传路径配置的问题。 ... [详细]
  • Zookeeper面试常见问题解析
    本文详细介绍了Zookeeper中的ZAB协议、节点类型、ACL权限控制机制、角色分工、工作状态、Watch机制、常用客户端、分布式锁实现、默认通信框架以及消息广播和领导选举的流程。 ... [详细]
  • 本文探讨了Android应用组件化过程中遇到的主要难题,特别是组件间解耦与通信机制的选择。通过对比协议通信与接口通信两种常见方案,分析它们各自的优缺点,并提出优化建议。 ... [详细]
  • 本文档提供了在iOS开发中使用OClint进行静态代码分析的详细步骤,包括安装、更新和使用方法,以及相关资源链接。 ... [详细]
  • 本文探讨了URL在网络通信中的作用及其结构,重点介绍了如何在iOS中使用URLComponents类解析URL,并讨论了URL在应用间跳转和本地文件访问中的应用。 ... [详细]
  • 本文探讨了如何利用自定义URI方案和注册表编辑,在Windows操作系统中实现从Web浏览器启动本地应用程序的方法,同时强调了这一过程中的安全考虑。 ... [详细]
  • 如何在UIWebView中加载本地图片
    本文详细介绍了如何在UIWebView中加载本地图片的方法,这对于需要在应用内展示静态页面和富文本内容的场景非常有用。 ... [详细]
  • 本文详细介绍了MySQL 5.5及以上版本中事务管理的全过程,包括事务的启动、设置、锁机制以及解锁方法,旨在为开发者提供一个清晰、全面的操作指南,避免因网络资料分散而导致的学习障碍。 ... [详细]
  • 本文探讨了HTA(HTML Application)环境中HTML5 IndexedDB的可用性问题,并提供了一种替代方案,即通过使用COM ActiveX对象来实现数据存储功能。 ... [详细]
  • 本文介绍了JSP的基本概念、常用标签及其功能,并通过示例详细说明了如何在JSP页面中使用Java代码。 ... [详细]
  • 本文探讨了Linux/Unix文件系统中两种主要的权限控制方式:传统的UGO(User/Group/Others)和更为精细的ACL(Access Control List)。ACL提供了一种更灵活的权限管理方法,适用于需要对文件系统进行细粒度控制的场景。 ... [详细]
  • 本文探讨了在使用Apache HttpClient 4.x(作为commons-httpclient 3.x的后续版本)时,如何配置默认的HttpContext,以确保每次执行请求时无需显式传递上下文。 ... [详细]
  • 一键LNMP配置SSL证书实现全站HTTPS访问
    许多网站搭建者选择了便捷的一键LNMP安装包,但在网站部署完成后,配置SSL证书以支持HTTPS访问是一个不可或缺的步骤。本文将详细介绍如何通过简单的步骤完成这一过程。 ... [详细]
  • iOS 小组件开发指南
    本文详细介绍了iOS小部件(Widget)的开发流程,从环境搭建、证书配置到业务逻辑实现,提供了一系列实用的技术指导与代码示例。 ... [详细]
author-avatar
手机用户2502912835
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有