Проверка правильности римских чисел - 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
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д