我想将一个原子转换为一个字符串,以检查第一个字母是否是大写字母,但是使用Clisp,函数字符串返回大写字母,我不能将它应用于我的原子。
示例:
(setq a 'ljlkj)
(upper-case-p (char (string a) 0)) ----> returns T (and I want nil)
我做错了什么?
提前谢谢你!
答案 0 :(得分:0)
Common Lisp reader是大小写转换(step 7)。
访问者controlled:{/ 3>是readtable-case
(defun test-readtable-case-reading ()
(let ((*readtable* (copy-readtable nil)))
(format t "READTABLE-CASE Input Symbol-name~
~%-----------------------------------~
~%")
(dolist (readtable-case '(:upcase :downcase :preserve :invert))
(setf (readtable-case *readtable*) readtable-case)
(dolist (input '("ZEBRA" "Zebra" "zebra"))
(format t "~&:~A~16T~A~24T~A"
(string-upcase readtable-case)
input
(symbol-name (read-from-string input)))))))
(test-readtable-case-reading)
的输出应如下:
READTABLE-CASE Input Symbol-name
-------------------------------------
:UPCASE ZEBRA ZEBRA
:UPCASE Zebra ZEBRA
:UPCASE zebra ZEBRA
:DOWNCASE ZEBRA zebra
:DOWNCASE Zebra zebra
:DOWNCASE zebra zebra
:PRESERVE ZEBRA ZEBRA
:PRESERVE Zebra Zebra
:PRESERVE zebra zebra
:INVERT ZEBRA zebra
:INVERT Zebra Zebra
:INVERT zebra ZEBRA
请参阅Why is Common Lisp case insensitive?的优秀答案,了解为什么 CL阅读器是案例转换的原因。