Определите функцию, зависящую от двух аргументов А и Б - Lisp
Формулировка задачи:
Определите функцию, зависящую от двух аргументов u и v, являющихся списками, которая вычисляет список всех элементов v, не содержащихся в u.
Решение задачи: «Определите функцию, зависящую от двух аргументов А и Б»
textual
Листинг программы
;; Рекурсия (defun diff (u v) (cond ((null v) nil) ((member (car v) u) (diff u (cdr v))) (t (cons (car v) (diff u (cdr v)))))) ;; Функционал (defun diff (u v) (remove-if #'(lambda (x) (member x u)) v))
Объяснение кода листинга программы
В предложенном коде реализована рекурсивная функция diff, которая вычисляет разность (рекурсивно) между двумя списками. Для этого используется язык программирования Lisp.
Вот список, описывающий код:
- Рекурсия
- Задана функция
diff, которая принимает два аргументаuиv. - Внутри функции используется условие
cond, которое проверяет три случая: 1) Еслиvравноnil, то возвращаетсяnil. 2) Если первый элементvявляется членом спискаu, то рекурсивно вызывается функцияdiffс аргументамиuиcdr v. 3) В противном случае, возвращается новый список, который получается путем добавления первого элементаvк результату вызова функцииdiffс аргументамиuиcdr v. - Завершает рекурсивный вызов функция
diff.
- Задана функция
- Функционал
- Задана функция
diff, которая принимает два аргументаuиv. - Внутри функции используется функция
remove-if, которая удаляет все элементы из спискаv, которые являются членами спискаu. - В качестве аргумента для функции
remove-ifиспользуется анонимная функция, которая проверяет каждый элемент спискаvна принадлежность к спискуu. - Возвращается отфильтрованный список.
Таким образом, в коде реализованы две функции: рекурсивная функция
diffдля вычисления разности между списками и функцияdiffдля удаления повторяющихся элементов из списка.
- Задана функция