Форма, которая вернет вам хеш-таблицу со всеми элементами, указанными в ней, может быть такой:
(let ((hash-table (make-hash-table :test 'equal)))
(dotimes (i (exp 256 3))
(puthash (concat "#" (format "%06x" i)) t hash-table))
hash-table)
Я не уверен, как Emacs будет управлять таким размером элементов (16 миллионов). Поскольку вы не хотите 0
, вы можете сгенерировать пробел без этого формата и удалить конечные 0. Я не знаю, что ты хочешь делать с остальными числами. Вы можете написать пошаговую функцию следующим образом:
(defun find-hex-space ()
(let (return-list)
(dotimes (i (exp 256 3))
(let* ((hex-number (strip-zeros (format "%x" i)))
(found-word (gethash hex-number *dictionary*)))
(if found-word (push found-word return-list))))
return-list))
Функция strip-zeros
проста в написании, и здесь я полагаю, что ваши слова находятся в хэше под названием *dictionary*
. strip-zeros
может быть что-то вроде этого:
(defun strip-zeros (string)
(let ((sm (string-match "^0*\\(.*?\\)0*$" string)))
(if sm (match-string 1 string) string)))
Я не совсем понимаю ваш второй вопрос. Слова будут также использовать шестнадцатеричное пространство? Тогда вы бы рассмотрели только слова, образованные цифрами, или включили бы буквы в слове?