Рекурсия: вернуть первый элемент, входящий в два произвольных списка - 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
, и возвращает результат.
Примеры использования функции:
(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)
.(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)
.(func '(1 3 a e) '(8 b c d))
Здесь первый список(1 3 a e)
и второй список(8 b c d)
. Поскольку первый список()
, функция возвращаетnil
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д