如何使用字符串引用property-list属性

时间:2014-10-25 16:04:58

标签: lisp common-lisp symbols property-list

考虑以下案例

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

(getf mat :f1)按预期输出1

我有一个变量(setf str "f1")(setf str 'f1),无论哪个都有效。 我希望能够做类似

的事情
(getf mat :str)

我该怎么做?

1 个答案:

答案 0 :(得分: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。