История изменений
Исправление no-such-file, (текущая версия) :
Можешь подсказать в виде идеи?
Вообще я не очень понял, зачем тебе это надо. Судя по всем заморочкам, ты хочешь получать строковое представление идентификатора константы/переменной. Так вот в лиспе это есть из коробки, т.к. для любого символа можно получить строку через symbol-name.
> (setf IAC 1)
1
> (symbol-name 'IAC)
"IAC"
Если же тебе надо по числу получить строку, или символ, то тут уже без списка(массива, хэша и т.п.) символов никак не обойтись. Вот тут пригодится макрос, который засетапит значения переданных символов и список самих символов.
В итоге должно получиться что-то вроде такого
(defenum *codes* (IAC 1 FOO 2 BAR 3))
;;; Делает
;;; (setf IAC 1 FOO 2 BAR 3)
;;; (defvar *codes* (list 'IAC 'FOO 'BAR))
;;; по желанию можно deftype
(find-enum *codes* 1)
;;; Проходим по *codes*, ищем (= (symbol-value i) 1) возвращаем i и/или (symbol-name i)
Можно ещё сахарка накинуть, прикрутить switch по *codes* и т.п.
Исходная версия no-such-file, :
Можешь подсказать в виде идеи?
Вообще я не очень понял, зачем тебе это надо. Судя по всем заморочкам, ты хочешь получать строковое представление идентификатора константы/переменной. Так вот в лиспе это есть из коробки, т.к. для любого символа можно получить строку через symbol-name.
> (setf IAC 1)
1
> (symbol-name 'IAC)
"IAC"
Если же тебе надо по числу получить строку, или символ, то тут уже без списка(массива, хэша и т.п.) символов никак не обойтись. Вот тут пригодится макрос, который засетапит значения переданных символов и список самих символов.
В итоге должно получиться что-то вроде такого
(defenum *codes* (IAC 1 FOO 2 BAR 3))
;;; Делает
;;; -> (setf IAC 1 FOO 2 BAR 3)
;;; -> (defvar *codes* (list 'IAC 'FOO 'BAR))
(find-enum *codes* 1)
;;; Проходим по *codes*, ищем (= (symbol-value i) 1) возвращаем i и/или (symbol-name i)
Можно ещё сахарка накинуть, прикрутить switch по *codes* и т.п.