문제
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 요리 책 다른 문자열/기호 변환 및 기호 및 패키지에 대한 자세한 토론.
제휴하지 않습니다 StackOverflow