Lisp - Как добавить несколько шестнадцатеричных чисел без базового преобразования? - PullRequest
3 голосов
/ 21 апреля 2011

Я хотел бы знать, как добавить несколько шестнадцатеричных чисел в lisp, не преобразовывая их сначала в другую базу.Как это можно сделать?

Ответы [ 3 ]

6 голосов
/ 22 апреля 2011

Common Lisp:

> (setf *print-base* 16)

> (setf *read-base* 16)

> (+ a d)
17
3 голосов
/ 21 апреля 2011

Шестнадцатеричное - это просто символьное представление чисел с использованием цифр от 0 до F. Реализация Lisp обычно преобразует шестнадцатеричные числа во внутреннее двоичное представление перед добавлением . Затем вы можете распечатать сумму в шестнадцатеричном формате, если это желаемый формат представления:

(format T "~x" (+ #xA #x2))

Вы можете написать функцию, которая реализует логику для символьного добавления шестнадцатеричных символов, например # \ A плюс # \ 2, это # ​​\ C, обрабатывая перенос, если вы хотите выйти за пределы единичных шестнадцатеричных цифр. Но такая функция не имеет большого значения, кроме как демонстрация алгоритма символьного шестнадцатеричного сложения.

3 голосов
/ 21 апреля 2011

В GNU Emacs шестнадцатеричные числа помечены # x.

(+ #x3 #xA)
13

Я не знаю, что используют Common LISP или Схема.

Если то, что у вас есть, похоже на

125A BD22 34FF

и вы хотите добавить их, вам нужно будет пройти через них, чтобы добавить теги #x, прежде чем заключать их в (+ ...).

(+ #x125A #xBD22 #x34FF)
...