我想知道如何在 lisp 中添加几个十六进制数字,而无需先将它们转换为另一个基数。怎么可能做到这一点?
问问题
2906 次
3 回答
6
普通 Lisp:
> (setf *print-base* 16)
> (setf *read-base* 16)
> (+ a d)
17
于 2011-04-21T20:42:17.903 回答
4
在 GNU Emacs 中,十六进制数字用#x 标记。
(+ #x3 #xA)
13
我不知道 Common LISP 或 Scheme 使用什么。
如果你拥有的是类似的东西
125A BD22 34FF
并且您想将它们相加,您必须在将它们包装在 (+ ...) 之前对它们进行编辑传递以预先添加 #x 标记。
(+ #x125A #xBD22 #x34FF)
于 2011-04-21T16:05:27.683 回答
3
十六进制只是数字的字符表示,使用从 0 到 F的数字。Lisp 实现通常会在加法之前将十六进制数字转换为其内部二进制表示。如果这是所需的演示格式,您可以然后以十六进制打印总和:
(format T "~x" (+ #xA #x2))
您可以编写一个函数来实现十六进制字符数字符号加法的逻辑,例如#\A 加上#\2 是#\C,如果您想超越单个十六进制数字,则处理进位。但是这样的函数没有什么作用,只是作为一个练习来演示符号十六进制加法的算法。
于 2011-04-21T16:25:20.393 回答