Рекурсия: вернуть первый элемент, входящий в два произвольных списка - Lisp

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

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

Предусмотреть определение рекурсивной функции по значению и по аргументу. Определить функцию, которая возвращает первый элемент, входящий в два произвольных списка.
;Рекурсия по аргументу:
(defun vozvrat (lst elm elm1)
 (cond ((null lst) nil)
       ((equal (car lst) elm) (cons elm1 (..... (cdr lst) elm elm1)))
       (t (cons (car lst) (..... (cdr lst) elm elm1)))))
 
;Рекурсия по значению:
(defun vozvrat (lst elm elm1)
 (cond ((null lst) nil)
       ((equal (car lst) elm) (read lst elm1) (vozvrat (cdr lst) elm elm1))
       (t (..... (cdr lst) elm elm1) lst)))
Что то я пошел не в ту степь и запутался, а сейчас не могу разобраться(( Помогите пожалуйста))

Решение задачи: «Рекурсия: вернуть первый элемент, входящий в два произвольных списка»

textual
Листинг программы
(defun func (lst1 lst2)
  (cond ((null lst1) nil)
        ((null lst2) nil)
        ((member (first lst1) lst2) (first lst1))
        ((member (first lst2) lst1) (first lst2))
        (t (func (rest lst1) (rest lst2)))))
FUNC
[3]> 
(func '(1 2 3 a 5) '(8 b 5 c d))
5
[4]> 
(func '(1 2 3 a 5 e) '(8 b 5 c d 2))
2
[5]> 
(func '(1 3 a e) '(8 b c d))
NIL

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

Функция с именем func принимает два аргумента: lst1 и lst2, которые являются списками. Если lst1 или lst2 равны nil, то функция возвращает nil. Если первый элемент lst1 присутствует во втором списке lst2, то функция возвращает первый элемент lst1. Если первый элемент lst2 присутствует в первом списке lst1, то функция возвращает первый элемент lst2. В противном случае, функция рекурсивно вызывает саму себя с двумя новыми списками: rest lst1 и rest lst2, и возвращает результат. Примеры использования функции:

  1. (func '(1 2 3 a 5) '(8 b 5 c d)) Здесь первый список (1 2 3 a 5) и второй список (8 b 5 c d). Поскольку первый элемент (1 2 3 a 5) не присутствует во втором списке (8 b 5 c d), функция рекурсивно вызывает саму себя с новыми списками (2 3 a 5) и (8 b 5 c d). Поскольку первый элемент (2 3 a 5) не присутствует во втором списке (8 b 5 c d), функция снова рекурсивно вызывает саму себя с новыми списками (3 a 5) и (8 b 5 c d). Поскольку первый элемент (3 a 5) присутствует во втором списке (8 b 5 c d), функция возвращает первый элемент (3 a 5).
  2. (func '(1 2 3 a 5 e) '(8 b c d 2)) Здесь первый список (1 2 3 a 5 e) и второй список (8 b c d 2). Поскольку первый элемент (1 2 3 a 5 e) не присутствует во втором списке (8 b c d 2), функция рекурсивно вызывает саму себя с новыми списками (2 3 a 5 e) и (8 b c d 2). Поскольку первый элемент (2 3 a 5 e) не присутствует во втором списке (8 b c d 2), функция снова рекурсивно вызывает саму себя с новыми списками (3 a 5 e) и (8 b c d 2). Поскольку первый элемент (3 a 5 e) не присутствует во втором списке (8 b c d 2), функция снова рекурсивно вызывает саму себя с новыми списками (a 5 e) и (8 b c d 2). Поскольку первый элемент (a 5 e) присутствует во втором списке (8 b c d 2), функция возвращает первый элемент (a 5 e).
  3. (func '(1 3 a e) '(8 b c d)) Здесь первый список (1 3 a e) и второй список (8 b c d). Поскольку первый список (), функция возвращает nil.

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


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

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

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