首页 > 解决方案 > 如何将 char 转换为 common lisp 中的符号?

问题描述

完全 lisp 初学者在这里。

我想知道如何将字符转换为符号。我想要的只是转换#\aa

这是我到目前为止所做的:

(defun convert(char)
(if(eq char #\a)
    (setq char 'a))
    char)

这实际上是可行的,但我不想添加 26 个条件(字母表中的字母)并制作一个冗长的代码。

另外我想知道 common lisp 中是否有任何函数可以将字符列表转换为符号列表,例如:(#\h #\e #\l #\l #\o)to (h e l l o)?我已经找到internmake-symbol与之相关,但它们需要字符串作为参数。

标签: listlispcommon-lisp

解决方案


CL-USER 230 > (intern (string #\Q))
Q
NIL

CL-USER 231 > (intern (string #\q))
\q
NIL

顺便说一句,您的代码有很多必要的改进:

(defun convert(char)   ; 
(if(eq char #\a)       ; use EQL instead of EQ for characters
                       ; indentation is wrong
    (setq char 'a))    ; indentation is wrong
    char)              ; indentation is wrong

最好写成:

(defun convert (char)
  (if (eql char #\a)
      'a
      char))

或者

(defun convert (char)
  (case char
    (#\a 'a)
    (#\b 'b)
    (otherwise char)))

如上所述,“真正的”解决方案是:

(defun convert (char)
  (intern (string char)))

推荐阅读