簡體   English   中英

通用 Lisp 編程關鍵字

[英]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函數,它打包了關鍵字創建過程(將名稱internKEYWORD包中)。 :-)

(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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM