在LET里面的DEFUN - 为什么?

Fra*_*rar 2 common-lisp

几天我正在阅读ChanL的来源.它包含一个使用渠道的例子来实现期货.DEFUN在LET中声明,如下:

(let ((some-var some-value))
  (defun foo () ... (reference some-var) ... )
  (defun bar () ...))
Run Code Online (Sandbox Code Playgroud)

这有什么用途?它只是提供一些共同的价值,几个功能可以共享,并保持封装清洁?

kod*_*ddo 6

您已经回答了以下问题:为一组函数提供共享绑定并保持封装清理.

来自http://letoverlambda.com/textmode.cl/guest/chap2.html的简单示例:

(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
Run Code Online (Sandbox Code Playgroud)

您还可以在此闭包内添加一个函数,该行为取决于方向.

  • 引用的章节提供了一些非常有趣的阅读.我将不得不购买Let over Lambda的副本! (2认同)