Проверка правильности римских чисел - Lisp
Формулировка задачи:
Решение задачи: «Проверка правильности римских чисел»
- ;;последовательность
- (defun F1 (L)
- (cond ((null L) T)
- ((and (eq (car L) 'I) (eq (cadr L) 'C)) nil)
- ((and (eq (car L) 'I) (eq (cadr L) 'D)) nil)
- ((and (eq (car L) 'I) (eq (cadr L) 'M)) nil)
- ((and (eq (car L) 'X) (eq (cadr L) 'D)) nil)
- ((and (eq (car L) 'X) (eq (cadr L) 'M)) nil)
- (t (F1 (cddr L)))
- )
- )
- ;;повторяемость
- (defun F2 (L)
- (cond ((null L) T)
- ((and (eq (car L) (cadr L)) (eq (car L) (caddr L)) (eq (car L) (cadddr L))) nil)
- (t (f2 (cdr L)))
- )
- )
- ;;основная функция
- (defun F (L)
- (let ((rl (explode L)))
- (if (F1 rl)
- (if (F2 rl) t nil) nil)))
- ;;основная функция, в которой аргумент-список
- (defun F (L)
- (if (F1 L)
- (if (F2 L) t nil) nil)
- )
- ;;результат
- (F 'XXXX)
- ==> NIL
- (F 'XXX)
- ==> T
- (F 'MMM)
- ==> T
- (F 'IMMM)
- ==> NIL
- (f 'MMMCMXCIX)
- ==> T
- (f '(M M M C M X C I X))
- ==> T
- (f '(M M M M C M X C I X))
- ==> NIL
Объяснение кода листинга программы
В этом коде реализована функция F
, которая проверяет правильность римского числа. Код содержит две вспомогательные функции: F1
и F2
, которые проверяют различные варианты римских чисел.
Функция F1
проверяет, является ли первый элемент списка римским числом, а если да, то проверяет второй элемент списка. Если второй элемент списка не является 'C', 'D' или 'M', то функция возвращает nil
. Если первый элемент списка 'I', то функция вызывает себя рекурсивно для оставшейся части списка.
Функция F2
проверяет, является ли первый элемент списка римским числом, а если да, то проверяет второй, третий и четвертый элементы списка. Если все они совпадают, то функция возвращает nil
. Если первый элемент списка 'X', то функция вызывает себя рекурсивно для оставшейся части списка.
Функция F
создает список из строки, используя функцию explode
, и затем вызывает функцию F1
для этого списка. Если F1
возвращает nil
, то функция вызывает себя рекурсивно для оставшейся части списка. Если F1
возвращает не nil
, то функция проверяет результат F2
и возвращает nil
или t
в зависимости от результата.
Код проверяет несколько примеров, включая 'XXXX', 'XXX', 'MMM', 'IMMM', 'MMMCMXCIX' и '(M M M C M X C I X)'. Все эти примеры являются правильными римскими числами, поэтому код возвращает t
. Если бы были использованы неправильные римские числа, например, '(M M M D C M X C I X)', код бы вернул nil
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д