2014-10-25 2 views
0

는 다음과 같은 경우를어떻게 예상대로

(setf mat (list :f1 1 :f2 2)) 

(getf mat :f1) 출력 1을 고려 문자열로 재산 목록 속성을 참조하십시오.

나는 변수 (setf str "f1") 또는 (setf str 'f1) 중 어떤 것이든 작동합니다. 는 그리고 나는이 작업을 수행 할 수있는 방법

(getf mat :str) 

같은 일을 할 수 있도록하려면?

답변

2

문자열을 키로 사용하거나 키워드를 변수에 저장하려는 경우 해시 테이블 사용을 고려하지 않는 것이 좋습니다. 그렇게해야 할 경우 문자열을 키워드로 변환 한 다음 필드를 조회 할 수 있습니다. 문자열을 기호로 변환하려면 intern을 사용하여 키워드로 만드십시오.이 패키지는 :KEYWORD 패키지로만 제공됩니다.

(defparameter *data* (list :f1 1 :f2 2)) 

;;; Case of string IS important 
;;; (intern "f1" :keyword) => :|f1| 
;;; (intern "F1" :keyword) => :F1 

(getf *data* (intern "F1" :keyword)) 
;;; => 1 

또한 코드를 사용하는 경우 Alexandria library의 make-keyword를 사용할 수 있습니다.

+0

감사! 방금 Lisp을 시작했습니다. – emotionull