Рекурсия: вернуть первый элемент, входящий в два произвольных списка - 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
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д