Is there a function in Common Lisp that takes a string as an argument and returns a keyword?
Example: (keyword "foo")
-> :foo
Is there a function in Common Lisp that takes a string as an argument and returns a keyword?
Example: (keyword "foo")
-> :foo
(intern "foo") -> :foo
See the Strings section of the Common Lisp Cookbook for other string/symbol conversions and a detailed discussion of symbols and packages.
Here's a make-keyword
function which packages up keyword creation process (intern
ing of a name into the KEYWORD
package). :-)
(defun make-keyword (name) (values (intern name "KEYWORD")))
The answers given while being roughly correct do not produce a correct solution to the question's example.
Consider:
CL-USER(4): (intern "foo" :keyword)
:|foo|
NIL
CL-USER(5): (eq * :foo)
NIL
Usually you want to apply STRING-UPCASE to the string before interning it, thus:
(defun make-keyword (name) (values (intern (string-upcase name) "KEYWORD")))