Сравнить два списка - 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. Примеры использования функции:

  1. (longer-than '(a b) '(a b)) — в этом случае функция вернёт nil, так как оба списка равны между собой.
  2. (longer-than '(a b) '(a)) — в этом случае функция вернёт t, так как первый список длиннее второго.

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


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

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

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