将整数转换为Common Lisp中的字符

时间:2014-10-02 08:58:38

标签: type-conversion common-lisp

有没有办法在Common Lisp中将整数解析为它们的char等价物?

我整个上午一直在寻找,只找到char-int ......

* (char-int #\A)

65

其他一些消息来源也声称存在int-char

* (int-char 65)
; in: INT-CHAR 65
;     (INT-CHAR 65)
; 
; caught STYLE-WARNING:
;   undefined function: INT-CHAR
; 
; compilation unit finished
;   Undefined function:
;     INT-CHAR
;   caught 1 STYLE-WARNING condition

debugger invoked on a UNDEFINED-FUNCTION:
  The function COMMON-LISP-USER::INT-CHAR is undefined.

Type HELP for debugger help, or (SB-EXT:EXIT) to exit from SBCL.

restarts (invokable by number or by possibly-abbreviated name):
  0: [ABORT] Exit debugger, returning to top level.

("undefined function")

然而,我真正想要的是将1转换为#\1

的方式

我到底该怎么做?

2 个答案:

答案 0 :(得分:5)

要在字符及其数字编码之间进行转换,有char-codecode-char

* (char-code #\A)
65
* (code-char 65)
#\A

但是,要将数字转换为相应的字符,有digit-char

* (digit-char 1)
#\1
* (digit-char 13 16) ; radix 16
#\D

答案 1 :(得分:4)

已经接受了答案,但学习如何找到答案作为获得具体答案同样有帮助。找到所需功能的一种方法是进行 apropos 搜索" CHAR"。例如,在CLISP中,你得到:

> (apropos "CHAR" "CL")
...
CHAR-CODE                                  function
...
CODE-CHAR                                  function
...

另一个有用的资源是HyperSpec。在那里permuted index,并搜索" char"在" C"页面将是有用的。或者,在HyperSpec中,章节13. Characters是相关的,13.2 The Characters Dictionary将是有用的。

这两种方法也会找到另一个答案中提到的 digit-char 功能。