博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
lisp 笔记 - 闭包
阅读量:7121 次
发布时间:2019-06-28

本文共 912 字,大约阅读时间需要 3 分钟。

一般语言由 primitives 组成, lisp 由 meta-primitives 组成。lisp 不定义 primitives. “Any time there is a primitive, there is a barrier, a non-orthogonality, in the design of the system.”

 

let 用来创建 lexical scope.

lexical scope 的好处是这些绑定在编译后不需要为其实际分配任何内存 slot, 甚至一些显而易见的逻辑会被直接编译优化成简单的常量。

lisp 中 dynamic scope 通过 defvar 创建,类似于全局变量。dynamic scope 的变量必须在 environment 中开辟实际内存区域(runtime). 因此性能可能稍微不如 lexical scope. dynamic scope 的变量在遇到同名的 lexical scope 变量时可能被 shadow. shadow 的过程实际是在进入 lexical scope 时在 dynamic scope 的那个 environment 中先备份原来的值,然后改写该值,在退出 scope 前再次从备份中恢复原来的值。

 

let over lambda 是用来创建闭包的惯用法;

闭包本质是 state + 1个 function.

object 是 state + multiple functions.

在 let over lambda 结构中用 values 返回多个引用了相同 bindings 的 lambdas,可以实现 class 和 object.

let over lambda over let over lambda 可以实现 class variable (static variable).

 

let + lambda 的各种组合用法可以实现大多数语言中的 OO 系统特性。该组合甚至可以实现更独特的一些应用场景。抛开继承,在大多数情况下一个 OO 系统是不必要的。OO 系统是基于 let 和 lambda 的一种特定实现。

转载地址:http://xviel.baihongyu.com/

你可能感兴趣的文章
Apache(httpd) 报错You don't have permission to access /on this server.
查看>>
今天没白过之《ls命令的颜色》
查看>>
记录一下CACTI所用信息
查看>>
ptyhon的列表与字典操作
查看>>
python考勤分析
查看>>
JavaScript中对象深复制
查看>>
zend studio使用xdebug调试程序不能单步调试的解决方案
查看>>
响应式web设计之CSS3 Media Queries
查看>>
Linux下的网络协议分析工具-tcpdump快速入门手册
查看>>
Oracle常用诊断事件清单
查看>>
Go语言之读写锁
查看>>
openstack mitaka 完整安装详细文档(亲测,花了3天时间)
查看>>
MongoDB常用操作
查看>>
ifconfig详解
查看>>
创建带Tomcat服务的Centos Docker镜像
查看>>
ArcGIS JavaScript在线编辑
查看>>
for 循环嵌套for循环
查看>>
ambari 2.6.0.0开发环境配置
查看>>
Ubuntu 14.04 设置VNC
查看>>
MySQL 常用命令大全
查看>>