Общие элементы двух списков (массивов) - Lisp
Формулировка задачи:
Решение задачи: «Общие элементы двух списков (массивов)»
(defun inters (a1 a2) (cond ((null a1) nil) ((member (car a1) a2) (cons (car a1) (inters (cdr a1) a2))) (t (inters (cdr a1) a2)))) ==> inters (inters '(1 2 3 4 5) '(3 4 5 6 7 8)) ==> (3 4 5)
Объяснение кода листинга программы
Функция inters
принимает два аргумента - списки a1 и a2. Она возвращает список, содержащий только те элементы, которые присутствуют одновременно в обоих списках.
В первой строке кода функция объявлена с помощью defun. В данном случае функция называется inters
, а ее аргументы - a1 и a2.
Затем следует тело функции, заключенное в скобки. Оно состоит из одной инструкции cond. Условие этой инструкции - это проверка на то, что первый аргумент a1 является null (т.е. пустым списком). Если это условие истинно, то возвращается значение nil.
Если условие не выполняется (т.е. a1 не является null), то выполняется проверка на то, является ли первый элемент a1 (который обозначается как (car a1)) элементом списка a2. Если это условие истинно, то (car a1) добавляется в результат (который пока что является пустым списком), а затем функция вызывается рекурсивно для оставшейся части списка a1 и списка a2.
Если оба условия не выполняются (т.е. a1 не является null и его первый элемент не является элементом списка a2), то возвращается значение t, что означает, что функция должна продолжить обход списка a1.
В конце функция заканчивается, и результатом будет являться итоговый список общих элементов.
В приведенном примере функция inters
принимает два аргумента: '(1 2 3 4 5) и '(3 4 5 6 7 8). После выполнения функции будет возвращен список (3 4 5), так как только эти элементы присутствуют одновременно в обоих списках.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д