2011-01-24 1 views
4

나는 아주 LISP를 사용하고 있습니다. 알레그로 - 클을 사용하고 있습니다. 내가 정의하고로드 한 함수를 호출하는 데 어려움을 겪고 있습니다. 특정 패키지의 모든 메소드를 나열하거나 패키지 이름 등을 나열하는 것과 같이 내가 정의한 것을 탐색 할 수있는 방법이 무엇인지 알고 싶습니다.LISP에서 정의를 검색 하시려면

+0

유사 : http://stackoverflow.com/questions/1511981/how-to-examine-list-of-defined-functions-from-common-lisp-repl-prompt – harschware

답변

4

저는 Allegro를 사용하지 않습니다. CL, 그래서 나는 CL 자체가 제공하는 도구에 대해서만 말할 수 있습니다. Allegro CL IDE가이 작업을 위해 제공해야하는 것을 확인할 수 있습니다.

LIST-ALL-PACKAGES 기능을 사용하여 모든 패키지 목록을 가져올 수 있습니다. 당신은 그들의 이름을 인쇄하려면이처럼 사용할 수 있습니다

(dolist (p (list-all-packages)) (write-line (package-name p))) 

CL 패키지는 문자 (예 : 이름)이 아닌이 이름과 관련된 개체의 모음입니다. 해당 기호에 대해 정의 된 값 및/또는 함수가 있는지 보려면 해당 기호의 이름을 더 쿼리해야합니다. DO-SYMBOLS을 사용하여 패키지의 모든 심볼을 반복 할 수 있습니다. 이것은 현재 패키지에 모든 기호를 인쇄 할 것이다 :

(do-symbols (s) (print s) 
기능 만

이 :

(do-symbols (s) (when (fboundp s) (print s))) 

누구의 집 패키지 현재의 패키지이 단지 기능 :

(do-symbols (s) 
    (when (and (eq (symbol-package s) *package*) 
      (fboundp s)) 
    (print s))) 
+0

감사합니다. 함수 정의를 어떻게 인쇄합니까? – harschware

+0

마지막 두 개는 현재 패키지의 기능으로 제한되지 않는 것 같습니다. 또는 적어도, 모든 패키지 (현재 범위에서 호출 가능)에서 정의 된 함수를 볼 수 있습니다. – harschware

+0

함수의 정의를 인쇄하는 표준 방법은 없습니다. 구현이 디버깅을 지원하도록 저장하면 가능할 수도 있지만 가능성은 희박합니다. 그러나 얻을 수 있어야하는 것은 소스 위치입니다. (SLIME의 swank-allergro.lisp 파일을 올바르게 이해했다면, Allegro는 그것을 위해'excl : find-source-file' 함수를 제공해야합니다 .. –

3

을 이름의 일부를 기억하면 항상 APROPOS (특정 패키지로 제한 될 수 있음)를 사용하여 전체 이름을 찾을 수 있습니다.

0

같은 문제가 발생했습니다. 문서를 읽은 후에 REPL에 입력 된 정의를 기억할 방법이 없다고 생각했습니다.

이 문제를 해결하려면 항상 편집기 창에 입력하십시오 (Ctrl + N이없는 경우). 이 방법으로 정의를 입력하고 편집 할 수 있습니다. 정의를 평가해야하는 경우 증분 평가를 위해 Ctrl + E를 누릅니다 (도구 메뉴의 다른 옵션 참조). 왼쪽에는 청취자 창을, 오른쪽에는 입력 창과 출력 창을 표시하는 편집기 창이 있습니다.

버그를 일으킬 수있는 약간의 문제가 있습니다. 변경 한 후에 정의를 평가하는 것을 잊어 버리면 이전 버전이 REPL에 남아 있습니다. 계속 Ctrl + E를 누릅니다.

여러 파일이 열려 있고 소스 파일 중 하나에서 정의를 찾으려면 검색> Apropos를 사용할 수 있습니다.