2012-12-12 65 views

回答

4

在Emacs < 24.3中,您可以使用(require 'cl)然後使用labels。在Emacs-24.3及更高版本中,您也可以執行(require 'cl-lib),然後使用cl-fletcl-labels

所有這些都是生成類似(let ((fun (lambda (args) (body)))) ... (funcall fun my-args) ...)的代碼的「複雜宏」,因爲底層語言本身不支持本地函數定義。

+0

我將此作爲接受的答案切換,因爲它更完整,並提供了完整的背景。 –

2

labels,但我不知道這是你在找什麼:

(defun foo() 
    42) 

(defun bar() 
    (foo)) 

(list 
(foo) 
(bar) 
(labels ((foo() 
       12)) 
    (list (foo) 
     (bar))) 
(foo) 
(bar)) 

它返回(42 42 (12 42) 42 42)

+0

對我24.2.1返回「Symbol的函數定義是void:labels」 –

+0

'(require'cl)'。如果您有足夠的版本,請使用'(cl-labels ...)'代替。 – Hugh

+0

文檔字符串說:「這就像'flet',除了綁定是詞法」。這正是我想要的。謝謝! –