2011-04-21 1 views
3

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

+2

Если вы «преобразования шестнадцатеричного числа в целое число», это звучит, как вы преобразование строки в целое число, а не номер в базе 16 ряда в базе 10 Если вы фактически переходите на базу 10, вы делаете что-то неправильно; если вы конвертируете строку, представляющую шестнадцатеричное число, в целое число, то вы делаете так же хорошо, как можете. – dfan

+0

Невозможно выполнить шестнадцатеричную математику в lisp без преобразования базы? –

+0

«Базовое преобразование» означает, например, преобразование строки, представляющей число в базе 16, в строку, представляющую число в базе 10. Я не думаю, что это то, о чем вы говорите здесь. – dfan

ответ

3

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

(+ #x3 #xA) 
13 

Не знаю, что общего используется LISP или схема.

Если то, что у вас есть что-то вроде

125A BD22 34FF 

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

(+ #x125A #xBD22 #x34FF) 
3

Hexadecimal просто символьное представление чисел с помощью цифр от 0 до F. Лиспа реализации обычно конвертировать шестнадцатеричные числа в его внутреннее двоичное представление перед добавлением. Вы можете напечатать сумму в шестнадцатеричном, если это желаемый формат представления:

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

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

6

Common Lisp:

> (setf *print-base* 16) 

> (setf *read-base* 16) 

> (+ a d) 
17