APROPOS — 심볼 검색
APROPOS — 심볼 검색
APROPOS와 APROPOS-LIST는 함수예요. 이름에 특정 부분 문자열이 들어 있는 interned 심볼을 찾을 때 써요. REPL에서 "이런 기능을 하는 심볼이 뭐가 있었지?" 하고 기억을 되살릴 때 유용한 탐색 도구죠. 두 함수는 결과를 "화면에 출력"하냐 "리스트로 반환"하냐에서 갈라져요.
본문
시그니처는 다음과 같아요.
apropos string &optional package => <no values>
apropos-list string &optional package => symbols
인자를 보면요.
- string — 문자열 디자이네이터(string designator).
- package — 패키지 디자이네이터 또는
nil. 기본값은nil이에요. - symbols — 심볼들의 리스트.
동작은 이렇습니다. 두 함수 모두 이름에 string 부분 문자열이 들어 있는 interned 심볼을 검색해요. 차이는 여기서 나요.
- apropos — 심볼 하나를 찾을 때마다 그 이름을 표준 출력(standard output)에 인쇄해요. 또 그 심볼이 함수나 동적 변수로 정의되어 있으면 그 정의에 대한 정보도 함께 인쇄될 수 있어요. 반환값은 없어요.
- apropos-list — 검색하는 동안 아무 출력도 하지 않고, 검색이 끝나면 일치하는 심볼들의 리스트를 돌려줘요.
package가 nil이 아니면 그 패키지에서 접근 가능한(accessible) 심볼만 검색하고, nil이면 어떤 패키지에서든 접근 가능한 모든 심볼을 검색해요.
한 가지 특이한 점이 있어요. 심볼은 둘 이상의 상속 경로로 접근 가능할 수 있어서, apropos가 같은 심볼에 대한 정보를 두 번 이상 인쇄하거나, apropos-list가 중복 심볼을 포함한 리스트를 돌려줄 수도 있어요. 검색이 대소문자를 구분하는지는 구현 정의(implementation-defined)예요.
이 함수들의 결과에 영향을 주는 것도 짚어두면 좋아요. 검색되는 패키지에 현재 interned 되어 있는 심볼들의 집합에 따라 달라지고, apropos는 *standard-output*의 영향도 받아요. 예제는 없어요. 탐색 결과를 눈으로 확인하는 함수라서, 출력 결과가 곧 예제라고 보면 돼요.