От чисел к словам: отображение в Common Lisp стало проще!

В этой статье блога мы рассмотрим различные методы сопоставления чисел с соответствующими им словами с помощью Common Lisp. Мы углубимся в некоторые примеры кода и объясним концепции в разговорной форме. Итак, начнем!

Метод 1: использование таблицы поиска

Один простой подход — создать таблицу поиска, которая сопоставляет числа с соответствующими им словами. Вот пример реализации:

(defparameter *number-words*
  '((0 . "zero") (1 . "one") (2 . "two") (3 . "three") (4 . "four")
    (5 . "five") (6 . "six") (7 . "seven") (8 . "eight") (9 . "nine")))
(defun number-to-word (num)
  (cdr (assoc num *number-words*)))

В этом методе мы определяем глобальную переменную *number-words*в качестве таблицы поиска. Функция number-to-wordпринимает число в качестве входных данных и извлекает соответствующее слово из таблицы поиска, используя assocи cdr.

Метод 2: использование рекурсии и Divmod

Другой подход предполагает использование рекурсии и функции divmodдля преобразования чисел в слова. Вот пример реализации:

(defun number-to-word (num)
  (let* ((units '("zero" "one" "two" "three" "four" "five" "six" "seven" "eight" "nine"))
         (tens '("ten" "eleven" "twelve" "thirteen" "fourteen" "fifteen" "sixteen"
                 "seventeen" "eighteen" "nineteen"))
         (decades '("" "" "twenty" "thirty" "forty" "fifty" "sixty" "seventy" "eighty" "ninety")))
    (cond
      ((< num 10) (nth num units))
      ((< num 20) (nth (- num 10) tens))
      ((< num 100) (concatenate 'string (nth (floor num 10) decades) " " (number-to-word (mod num 10))))
      ((< num 1000) (concatenate 'string (number-to-word (floor num 100)) " hundred " (number-to-word (mod num 100))))
      (t "number out of range"))))

В этом методе мы определяем списки units, tensи decadesдля хранения соответствующих слов для чисел до 9, 19, и 90 соответственно. Функция number-to-wordиспользует рекурсию, разделяя число на части из сотен, десятков и единиц, пока оно не достигнет базового случая.

В этой статье блога мы рассмотрели два метода сопоставления чисел со словами в Common Lisp. В первом методе использовалась таблица поиска, а во втором — рекурсия и функция divmod. Оба подхода предоставляют способы преобразования чисел в их словесные представления, что обеспечивает универсальное использование в различных приложениях.

Поняв эти методы, вы теперь можете легко сопоставлять числа со словами в Common Lisp. Независимо от того, предпочитаете ли вы таблицу поиска или рекурсию, у вас есть инструменты для эффективного решения этой задачи.

Не забывайте экспериментировать и адаптировать эти методы к своим конкретным случаям использования. Приятного кодирования!