уловка с кодом, который вы показываете, в плохой форме. я знаю это, потому что я делаю все это
время. код предполагает, что компилятор будет знать текущее исправление
за каждого персонажа. #. (char-code # \ a) eq [(или, может быть, eql, если вы так склонны), 8-битное целое без знака или 8-битное без знака с возвращаемым значением положительного фиксированного числа].
# - макрос для чтения (я уверен, что вы это знаете :). Использование двух макросов для чтения
не очень хорошая идея, но это быстро, когда компилятор знает тип данных.
У меня есть другой пример. Нужно искать ascii в двоичном потоке:
(defmacro code-char= (byte1 byte2)
(flet ((maybe-char-code (x) (if characterp x) (char-code x) x)))
`(the fixnum (= (the fixnum ,(maybe-char-code byte1)
(the fixnum ,(maybe-char-code byte2)))))
))
Объявление типа возврата в sbcl, вероятно, оскорбляет компилятор, но я оставляю это как проверку работоспособности (4 меня, а не вы).
(code-char = # \ $ # x36)
=>
т
. По крайней мере, я так думаю. Но почему-то я думаю, что вы, возможно, знаете, как обходить некоторые макросы ... Хммм ... Я должен включить машину ...
Если вы серьезно заинтересованы, есть какой-нибудь ассемблер для 286 (8/16 битный DOS ассемблер), который вы можете использовать в таблице переходов. Он быстро работает на ПК, мне нужно его посмотреть ...