Сравнение дат - Lisp

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

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

1. Известны даты рождения двух человек. Определить, кто из них старше. Для решения задачи написать именованную функцию CLISP

Решение задачи: «Сравнение дат»

textual
Листинг программы
;; Даты представляются списками вида (день месяц год)
;; если даты равны, рез = 0
;; если больше первая дата, рез = 1
;; иначе рез = -1
(defun cmp-dat (dat1 dat2)
  (let* ((d1 (nth 0 dat1))
         (m1 (nth 1 dat1))
         (y1 (nth 2 dat1))
         (d2 (nth 0 dat2))
         (m2 (nth 1 dat2))
         (y2 (nth 2 dat2))
         (ydm1 (+ (* y1 10000) (* m1 100) d1))
         (ydm2 (+ (* y2 10000) (* m2 100) d2)))
    (cond ((= ydm1 ydm2) 0)
          ((> ydm1 ydm2) 1)
          (t -1)))) 
 
==> CMP-DAT
 
(cmp-dat '(21 01 1961) '(28 09 1954))
 
==> 1

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

В данном коде представлена функция cmp-dat, которая принимает два аргумента — dat1 и dat2, представляющие собой списки, содержащие даты в формате (день месяц год). Далее, внутри функции, с помощью функции nth извлекаются значения дня, месяца и года из обоих списков. Затем, создаются две новые переменные ydm1 и ydm2, в которых значения года, месяца и дня преобразуются в числа и складываются. После этого, с помощью условной конструкции cond, проверяется равенство ydm1 и ydm2. Если они равны, то значение переменной res устанавливается равным 0. Если ydm1 больше ydm2, то значение переменной res устанавливается равным 1. В противном случае, значение переменной res устанавливается равным -1. Наконец, функция возвращает значение переменной res. В приведенном примере функция cmp-dat сравнивает две даты: '(21 01 1961) и '(28 09 1954). Так как ydm1 больше ydm2, то функция возвращает значение 1.

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


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

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

8   голосов , оценка 3.75 из 5
Похожие ответы