Смежное число в списке с подсписками - Lisp
Формулировка задачи:
Добрый день. Интересует способ реализации следующей задачи: есть функция в двумя аргументами. Первый - это список с подсписками, а второй - это простое число. Нужно проверить, в каких подсписках есть это чисто и вывести второе чисто из этого подсписка. Например, есть функция:
где - список с подсписками
- искомое число
Функция должна вернуть
так как у нас есть подспики, в которых присутствует число 1
Заранее большое спасибо.
Листинг программы
- ( find_neighbours '((1 2) (3 1) (4 5) (9 1) (2 3) (1 5)) 1 )
Листинг программы
- '((1 2) (3 1) (4 5) (9 1) (2 3) (1 5))
Листинг программы
- 1
Листинг программы
- (2 3 9 5)
Листинг программы
- ( (1 2) (3 1) (9 1) (1 5) )
Решение задачи: «Смежное число в списке с подсписками»
textual
Листинг программы
- (defun task (lst p)
- (remove p (apply 'append (remove-if-not (lambda (x) (member p x)) lst))))
- ==> task
- (task '((1 2) (3 1) (4 5) (9 1) (2 3) (1 5)) 1 )
- ==> (2 3 9 5)
Объяснение кода листинга программы
В данном коде определён функционал для решения поставленной задачи.
- В первой строке кода определена функция с именем task.
- Вторая строка кода удаляет указанный элемент из списка.
- Третья строка кода добавляет все элементы списка, которые не содержат указанный элемент, в новый список.
- В четвёртой строке кода применяется функция apply к списку, который был получен на предыдущем шаге, с целью объединения всех его элементов в один список.
- В пятой строке кода используется функция remove-if-not для удаления всех элементов из списка, которые не содержат указанный элемент.
- Шестая строка кода использует функцию member для проверки наличия указанного элемента в каждом элементе списка.
- В седьмой строке кода определён список, который будет использоваться в качестве входных данных для функции task.
- В восьмой строке кода вызывается функция task с указанным списком и указанным элементом в качестве аргументов.
- В девятой строке кода выводится результат выполнения функции task.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д