closure应用一例 (Common Lisp实现)
http://bbs.chinaunix.net/thread-1260094-1-1.html
http://bbs.chinaunix.net/thread-1261686-1-2.html
- (let ((s " ")
- (i -1))
- (defun next ()
- (setf s (format nil "~A~A~A"
- (subseq s 1 20)
- (if (eql (char s 19) # )
- (setf i (+ i 1))
- # )
- (subseq s 19 38)))))
- (dotimes (n 20)
- (format t "~A~%" (next)))
复制代码
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(9)
运算封闭我觉的实在不是一个好词.
APL 如同钻石,有着美妙的晶体结构;它的所有部分都以一致和优美的方式关联在一起。但是如果你尝试以任何方式扩展这种结构 - 即使是增加另一个钻石 - 你将得到一个丑陋的杂种。在另一方面,LISP 如同泥球。你可以向它增加任意数量的泥巴,它看起来还是个泥球。
由此看来closure这个概念在lisp里实在是很根本的.
[ 本帖最后由 chenzengjie 于 2009-1-4 14:01 编辑 ]
你一说运算封闭我就明白了
SICP 上的说的 Closure 指的是运算封闭。
SICP 中文版 65 页有一个注脚,说:Lisp 社团还用术语“闭包”描述一个与此毫不相干的概念:闭包也是一种表示带有自由变量的过程而用的实现技术。
MMMIX 说的 Closure 就是后一种。这个闭包似乎在计算机领域里更普遍一些,英文为 lexical closuer。
[ 本帖最后由 win_hate 于 2009-1-4 13:45 编辑 ]
这里的closure应该是指带有上下文的函数定义。
这在scheme里是内建的,也就是函数的环境属性。
sicp有注脚说明了这两种closure解释的区别。
Perl 的 closure 在 perlref 中介绍,执行 perldoc perlref 然后搜索 closure 就能看到。在看 Scheme 的时候,也被 closure 搞的有点迷糊,不过 perlref 中对 closure 的解释我倒是看明白了,它是这么说的:
下面紧接着就是个例子。
不知道,你引的那两段我没看明白。
perl 的 closure 具体指的是什么?这个词我好像总是消化不了。在 SICP 中,对 closure 描述为
perl 的 closure 跟这个是一致的吗?
[ 本帖最后由 win_hate 于 2009-1-4 12:11 编辑 ]
closure 在 Perl 中被用来实现函数模板,在 Lisp 中应该也可以起类似的作用。
复制代码
[ 本帖最后由 x2 于 2009-1-4 11:57 编辑 ]
不错,交替插入空格或数字。
Lisplogo_alien_256.png (20.29 KB, 下载次数: 4)
下载附件
2008-10-15 21:23 上传
[ 本帖最后由 win_hate 于 2008-10-15 21:30 编辑 ]