2011-12-02 4 views

답변

12

이 (철 이맥스 '미니 버퍼에 arglists을 표시 할 수있는 점액을 제공합니다) 각 CL 구현하지만 허풍 패키지에 대한 다른 하나의 기능이를 래핑 :

* (defun testfn (arg1 arg2 &key (arg3 :a)) (declare (ignore arg1 arg2 arg3))) 
TESTFN 
* (swank-backend:arglist #'testfn) 
(ARG1 ARG2 &KEY (ARG3 :A)) 

이것은 또한 작동합니다 메소드 : 허풍을 얻을

* (defmethod testmethod ((arg1 t) arg2 &key (arg3 :a)) (declare (ignore arg1 arg2 arg3))) 
STYLE-WARNING: Implicitly creating new generic function TESTMETHOD. 
#<STANDARD-METHOD TESTMETHOD (T T) {1005670231}> 
* (swank-backend:arglist #'testmethod) 
(ARG1 ARG2 &KEY (ARG3 :A)) 

가장 쉬운 방법은 Quicklisp을 사용하는 것입니다.

+0

호환성 레이어로 사용 하시겠습니까? 재미있는 – sabof

6

나는 표준 방법을 알고하지 않습니다하지만 SBCL에 당신은 sb-introspect:function-lambda-list를 사용할 수 있습니다.

(defun test (a &rest rest &key (b 42)) nil) 
(sb-introspect:function-lambda-list #'test) 
=> (A &REST REST &KEY (B 42)) 
5

ANSI Common Lisp는 구현이 지원하고 표현식이 기록 된 경우 람다 식을 반환 할 수있는 FUNCTION-LAMBDA-EXPRESSION 함수를 제공합니다. 람다 표현식에서 두 번째 항목은 인수 목록입니다 - 평소와 같이.

그렇지 않으면 인수 목록이 ANSI CL 표준에 정의 된 특정 리스프 구현의 일부입니다하지 않습니다 돌아갑니다. 예를 들어 일부 '전달 된'Lisp 응용 프로그램에서는이 정보가 없을 수 있습니다.

일반적으로 대부분의 CL의 구현은 일부 내부 패키지에 내 보낸 함수 아글리스트를해야합니다.

관련 문제