回答
这是一个make-keyword
函数,它将关键字创建过程(intern
的名称包装到KEYWORD
包中)打包。 :-)
(defun make-keyword (name) (values (intern name "KEYWORD")))
(intern "foo" "KEYWORD") -> :foo
其他串/符号转换和符号和包的详细讨论见Common Lisp Cookbook的Strings section。
的名称需要在“关键字”包被扣留是一个关键字。例如(intern“FOO”“KEYWORD”) – 2008-10-17 11:24:28
啊是的。 (intern“foo”“KEYWORD”)工作得非常好。谢谢。 – nathan 2008-10-17 11:30:30
在我的回答中,我将它打包成一个整洁的小功能,您可以享受。 :-) – 2008-10-17 11:33:39
在大致正确的情况下给出的答案并不能为问题的例子提供正确的解决方案。
考虑:
CL-USER(4): (intern "foo" :keyword)
:|foo|
NIL
CL-USER(5): (eq * :foo)
NIL
通常你想实习之前将字符串UPCASE适用于字符串,即:
(defun make-keyword (name) (values (intern (string-upcase name) "KEYWORD")))
有一个在Alexandria库make-keyword
功能,虽然它保存大小写以得到你想要的东西,然后你必须首先处理字符串。
在本例中它也与空格的字符串(由点代替)涉及:
(defun make-keyword (name) (values (intern (substitute #\. #\space (string-upcase name)) :keyword)))
- 1. 关于Common Lisp中
- 2. Common Lisp a Lisp-n?
- 3. Common Lisp SublimeREPL
- 4. Common Lisp Loop Trouble
- 5. Step Eval Common Lisp
- 6. 与Common Lisp中
- 7. Common Lisp流?
- 8. Common Lisp中
- 9. Common Lisp Binary Tree
- 10. Scheme或Common Lisp
- 11. “unfold”for common lisp?
- 12. common lisp和emacs
- 13. Common Lisp Timer
- 14. Scheme或Common Lisp?
- 15. Predicates Common Lisp
- 16. Scheme vs Common Lisp
- 17. 规则Common Lisp中
- 18. 如果Common Lisp中
- 19. 的#ifndef Common Lisp中
- 20. Common Lisp弱引用?
- 21. 通过位置或关键字接受参数的Common Lisp函数?
- 22. Common Lisp类层次结构
- 23. LISP:关键字参数,提供 - p
- 24. 在Common Lisp中使用字符串对象作为散列键
- 25. Common Lisp类型说明符
- 26. 转换字符串列表Common Lisp中
- 27. Common Lisp的:包含字符串 “\ n”
- 28. Common Lisp并行编程
- 29. 了解Common Lisp的做宏观语法
- 30. 在ideone.com上运行Common Lisp?
差不多,但不完全。在创建关键字时,还必须确保将其值绑定到自身。 – Vatine 2014-06-06 06:14:13
@Vatine我只有SBCL才能测试,而在SBCL中,`(symbol-value(intern“FOO”“KEYWORD”))`已经具有正确的值。此外,亚历山大也使用相同的方法实施它。 – 2014-06-09 14:37:49