Задача на использование рекурсии - Lisp (229324)

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

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

Вот само задание: напишите функцию, возвращающую Т, если одинаковые атомы расположены в списках х и у в одном и том же порядке Буду очень благодарна любой помощи - особенно, полному коду для решения!

Решение задачи: «Задача на использование рекурсии»

textual
Листинг программы
(defun del-all (lsta lst)
  (cond ((null lst) nil)
        ((member (car lst) lsta) (cons (car lst) (del-all lsta (cdr lst))))
        (t (del-all lsta (cdr lst)))))
 
 
(defun task (a1 a2 lst1 lst2)
  (let ((s1 (del-all (list a1 a2) lst1))
        (s2 (del-all (list a1 a2) lst2)))
    (equal s1 s2)))
 
(task 'a 'x '(a b x c) '(h a x d))
 
==> T
 
(task 'a 'x '(a b x c) '(h x d a))
 
==> NIL

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

В коде определены две функции: del-all и task.

  1. del-all - принимает три аргумента: lsta, lst и x. Если lst равно nil, то возвращает nil. Если первый элемент lst является членом списка lsta, то возвращает новый список, в котором первый элемент - это car из lst, а остальные элементы - результат вызова del-all для lsta и cdr из lst. В противном случае, если lst не является пустым списком, то рекурсивно вызывает del-all для lsta и cdr из lst.
  2. task - принимает три аргумента: a1, a2 и два списка lst1 и lst2. Использует let для создания двух переменных: s1 и s2. Значение s1 - это результат вызова del-all для списка, содержащего a1 и a2, и исходного списка lst1. Значение s2 - это результат вызова del-all для списка, содержащего a1 и a2, и исходного списка lst2. Затем использует equal для сравнения значений s1 и s2. Если они равны, то возвращает t, иначе возвращает nil. При вызове task 'a 'x '(a b x c) '(h a x d) возвращает t, потому что списки s1 и s2 равны. При вызове task 'a 'x '(a b x c) '(h x d a) возвращает nil, потому что списки s1 и s2 не равны.

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


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

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

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