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

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

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

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

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

textual
Листинг программы
  1. (defun del-all (lsta lst)
  2.   (cond ((null lst) nil)
  3.         ((member (car lst) lsta) (cons (car lst) (del-all lsta (cdr lst))))
  4.         (t (del-all lsta (cdr lst)))))
  5.  
  6.  
  7. (defun task (a1 a2 lst1 lst2)
  8.   (let ((s1 (del-all (list a1 a2) lst1))
  9.         (s2 (del-all (list a1 a2) lst2)))
  10.     (equal s1 s2)))
  11.  
  12. (task 'a 'x '(a b x c) '(h a x d))
  13.  
  14. ==> T
  15.  
  16. (task 'a 'x '(a b x c) '(h x d a))
  17.  
  18. ==> 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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы