문제

Common LISP에는 문자열을 인수로 가져 와서 키워드를 반환하는 함수가 있습니까?

예시: (keyword "foo") -> :foo

도움이 되었습니까?

해결책

여기에 있습니다 make-keyword 키워드 생성 프로세스를 포장하는 함수 (intern이름의 KEYWORD 패키지). :-)

(defun make-keyword (name) (values (intern name "KEYWORD")))

다른 팁

대략적으로 정확한 대답은 질문의 예에 대한 올바른 해결책을 생성하지 않습니다.

고려하다:

CL-USER(4): (intern "foo" :keyword)

:|foo|
NIL
CL-USER(5): (eq * :foo)

NIL

일반적으로 문자열 업 케이스를 문자열에 적용하기 전에 문자열 업 케이스를 적용하려고합니다.

(defun make-keyword (name) (values (intern (string-upcase name) "KEYWORD")))

이있다 make-keyword 기능 알렉산드리아 라이브러리, 그것은 케이스를 보존하지만 원하는 것을 정확하게 얻으려면 먼저 문자열을 상류해야합니다.

이 예에서는 공백이있는 문자열도 다루고 있습니다 (점으로 대체).

(defun make-keyword (name) (values (intern (substitute #\. #\space (string-upcase name)) :keyword)))

콜론 사인으로 시작하도록 문자열을 변경할 수 있습니다. :

사용 read-from-string 곧장.

다음은 다른 버전입니다 make-keyword:

(defun make-keyword (name)
           (read-from-string (reverse (concatenate 'string 
                                                   (reverse name) ":"))))
(intern "foo" "KEYWORD") -> :foo

참조 문자열 섹션일반적인 LISP 요리 책 다른 문자열/기호 변환 및 기호 및 패키지에 대한 자세한 토론.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top