lisp转换为字符串大写

时间:2014-05-28 13:31:28

标签: symbols uppercase clisp

我想将一个原子转换为一个字符串,以检查第一个字母是否是大写字母,但是使用Clisp,函数字符串返回大写字母,我不能将它应用于我的原子。

示例:

(setq a 'ljlkj)
(upper-case-p (char (string a)  0))     ----> returns T (and I want nil)

我做错了什么?

提前谢谢你!

1 个答案:

答案 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阅读器是案例转换的原因。