2012-12-12 4 views

답변

4

이맥스 < 24.3에서는 (require 'cl)을 입력하고 labels을 사용할 수 있습니다. Emacs-24.3 이상에서는 (require 'cl-lib)을 수행 한 다음 cl-flet 또는 cl-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의 함수 정의는 무효입니다 : 레이블" –

+0

"(require 'cl)'을 반환합니다. 최근 버전이 있다면'(cl-labels ...)'를 사용하십시오. – Hugh

+0

docstring은 "바인딩은 어휘 적이라는 것을 제외하고는"flet과 같습니다 "라고 말합니다. 그게 내가 원하는거야. 감사! –