Сравнение дат - Lisp
Формулировка задачи:
Решение задачи: «Сравнение дат»
;; Даты представляются списками вида (день месяц год) ;; если даты равны, рез = 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.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д