Common lisp 在一辆出租汽车内拆卸-为什么?

Common lisp 在一辆出租汽车内拆卸-为什么?,common-lisp,Common Lisp,前几天我在读资料来源。它包含了一个使用通道实现未来的示例。DEFUNs是在一个LET中声明的: 这有什么作用?只是为了提供几个函数可以共享的公共值并保持封装干净吗?您已经回答了您的问题:为一组函数提供共享绑定并保持封装干净 以下是一个简单的例子: 您还可以在此闭包中添加一个函数,其行为取决于方向。这些只是闭包。仅就历史背景而言[] 闭包在一种编程风格中扮演着更为突出的角色 由Abelson和Sussman的经典结构和解释推动 计算机程序设计。闭包是具有局部状态的函数。这个 使用此状态的最简单方法

前几天我在读资料来源。它包含了一个使用通道实现未来的示例。DEFUNs是在一个LET中声明的:


这有什么作用?只是为了提供几个函数可以共享的公共值并保持封装干净吗?

您已经回答了您的问题:为一组函数提供共享绑定并保持封装干净

以下是一个简单的例子:


您还可以在此闭包中添加一个函数,其行为取决于方向。

这些只是闭包。仅就历史背景而言[]

闭包在一种编程风格中扮演着更为突出的角色 由Abelson和Sussman的经典结构和解释推动 计算机程序设计。闭包是具有局部状态的函数。这个 使用此状态的最简单方法是在如下情况下:

这两个函数共享一个用作计数器的变量。这个 第一个返回计数器的连续值,第二个返回计数器的连续值 将计数器重置为0。同样的事情也可以通过制作 对全局变量进行计数器运算,但这样可以防止 非故意的引用


引用的那一章是一些非常有趣的阅读。我得买一本《放过兰姆达》!
(let ((some-var some-value))
  (defun foo () ... (reference some-var) ... )
  (defun bar () ...))
(let ((direction 'down))
  (defun toggle-direction ()
    (setq direction
          (if (eq direction 'up)
              'down
              'up))))
(toggle-direction)   => UP
(toggle-direction)   => DOWN
(toggle-direction)   => UP
(toggle-direction)   => DOWN
(let ((counter 0))
  (defun new-id () (incf counter))
  (defun reset-id () (setq counter 0)))