По текущей дате определить следующую дату - Lisp

Узнай цену своей работы

Формулировка задачи:

Дата некоторого дня определяется двумя натуральными числами: порядковым номером месяца и числом. Определить дату следующего дня.

Решение задачи: «По текущей дате определить следующую дату»

textual
Листинг программы
  1. (defun next-day (d m)
  2.   (let ((dlist '(31 28 31 30 31 30 31 31 30 31 30 31))
  3.         (next-d (+ d 1)))
  4.    (if (<= next-d (nth (- m 1) dlist)) (list next-d m)
  5.            (if (< m 12) (list 1 (+ 1 m)) (list 1 1)))))
  6.                        
  7. ==> NEXT-DAY
  8.  
  9. (next-day 31 10)
  10.  
  11. ==> (1 11)
  12.  
  13. (next-day 31 12)
  14.  
  15. ==> (1 1)
  16.        
  17. ==> NEXT-DAY
  18.  
  19. (next-day 12 10)
  20.  
  21. ==> (13 10)
  22.  
  23. (next-day 30 10)
  24.  
  25. ==> (31 10)

Объяснение кода листинга программы

В данном коде определен функционал для определения следующей даты по текущей, при этом учитывается количество дней в каждом месяце. Список функций и переменных с описанием:

  1. (defun next-day (d m) - определение функции next-day, принимающей два аргумента d - текущую дату и m - текущий месяц
  2. (let ((dlist '(31 28 31 30 31 30 31 31 30 31 30 31)) - инициализация переменной dlist, которая содержит количество дней в каждом месяце
  3. (next-d (+ d 1)) - определение переменной next-d, которая содержит следующую дату по текущей
  4. (if (<= next-d (nth (- m 1) dlist)) (list next-d m) - проверка условия, что следующая дата не превышает количество дней в предыдущем месяце
  5. (if (< m 12) (list 1 (+ 1 m)) (list 1 1)) - проверка условия, что текущий месяц не является декабрем
  6. (list 1 1) - возврат следующей даты и текущего месяца в случае, если текущий месяц - декабрь
  7. (1 11) - возврат следующей даты и текущего месяца в случае, если текущий месяц - ноябрь
  8. (13 10) - возврат следующей даты и текущего месяца в случае, если текущий месяц - октябрь и текущая дата - 30
  9. (31 10) - возврат следующей даты и текущего месяца в случае, если текущий месяц - октябрь и текущая дата - 31
  10. (12 10) - возврат следующей даты и текущего месяца в случае, если текущий месяц - октябрь и текущая дата - 30

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 4 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут