[英]Common Lisp Programmatic Keyword
Common Lisp 中是否有將字符串作為參數並返回關鍵字的函數?
示例:( (keyword "foo")
-> :foo
給出的答案雖然大致正確,但不會為問題示例提供正確的解決方案。
考慮:
CL-USER(4): (intern "foo" :keyword)
:|foo|
NIL
CL-USER(5): (eq * :foo)
NIL
通常你想在實習之前將 STRING-UPCASE 應用於字符串,因此:
(defun make-keyword (name) (values (intern (string-upcase name) "KEYWORD")))
這是一個make-keyword
函數,它打包了關鍵字創建過程(將名稱intern
到KEYWORD
包中)。 :-)
(defun make-keyword (name) (values (intern name "KEYWORD")))
Alexandria庫中有一個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 (concatenate 'string ":" name)))
(intern "foo" "KEYWORD") -> :foo
有關其他字符串/符號轉換以及符號和包的詳細討論,請參閱Common Lisp Cookbook的字符串部分。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.