По текущей дате определить следующую дату - Lisp
Формулировка задачи:
Дата некоторого дня определяется двумя натуральными числами: порядковым номером месяца и числом. Определить дату следующего дня.
Решение задачи: «По текущей дате определить следующую дату»
textual
Листинг программы
(defun next-day (d m) (let ((dlist '(31 28 31 30 31 30 31 31 30 31 30 31)) (next-d (+ d 1))) (if (<= next-d (nth (- m 1) dlist)) (list next-d m) (if (< m 12) (list 1 (+ 1 m)) (list 1 1))))) ==> NEXT-DAY (next-day 31 10) ==> (1 11) (next-day 31 12) ==> (1 1) ==> NEXT-DAY (next-day 12 10) ==> (13 10) (next-day 30 10) ==> (31 10)
Объяснение кода листинга программы
В данном коде определен функционал для определения следующей даты по текущей, при этом учитывается количество дней в каждом месяце. Список функций и переменных с описанием:
- (defun next-day (d m) - определение функции next-day, принимающей два аргумента d - текущую дату и m - текущий месяц
- (let ((dlist '(31 28 31 30 31 30 31 31 30 31 30 31)) - инициализация переменной dlist, которая содержит количество дней в каждом месяце
- (next-d (+ d 1)) - определение переменной next-d, которая содержит следующую дату по текущей
- (if (<= next-d (nth (- m 1) dlist)) (list next-d m) - проверка условия, что следующая дата не превышает количество дней в предыдущем месяце
- (if (< m 12) (list 1 (+ 1 m)) (list 1 1)) - проверка условия, что текущий месяц не является декабрем
- (list 1 1) - возврат следующей даты и текущего месяца в случае, если текущий месяц - декабрь
- (1 11) - возврат следующей даты и текущего месяца в случае, если текущий месяц - ноябрь
- (13 10) - возврат следующей даты и текущего месяца в случае, если текущий месяц - октябрь и текущая дата - 30
- (31 10) - возврат следующей даты и текущего месяца в случае, если текущий месяц - октябрь и текущая дата - 31
- (12 10) - возврат следующей даты и текущего месяца в случае, если текущий месяц - октябрь и текущая дата - 30
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д