Сравнить два списка - Lisp
Формулировка задачи:
Помогите пожалуйста с заданием:
Определить функцию-предикат LONGER-THAN, аргументами которой являются два списка. Функция выдает результат t, если первый список длиннее второго.
Заранее спасибо =)
Решение задачи: «Сравнить два списка»
textual
Листинг программы
(defun longer-than (lst1 lst2) (loop (cond ((and (null lst2) lst1) (return t)) ((null lst1) (return nil)) (t (setq lst1 (cdr lst1) lst2 (cdr lst2)))))) ==> longer-than (longer-than '(a b) '(a b)) ==> NIL (longer-than '(a b) '(a)) ==> T
Объяснение кода листинга программы
В данном коде определённая функция longer-than
принимает два аргумента типа список (lst1 и lst2).
Если lst2 — пустой список, а lst1 не пустой, то возвращается t
(истина), иначе, если lst1 — пустой список, то возвращается nil
(ложь).
В противном случае, рекурсивно вызывается функция с двумя новыми аргументами: cdr от lst1 и cdr от lst2.
Примеры использования функции:
(longer-than '(a b) '(a b))
— в этом случае функция вернётnil
, так как оба списка равны между собой.(longer-than '(a b) '(a))
— в этом случае функция вернётt
, так как первый список длиннее второго.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д