Работа со списками и умножение многочленов - Lisp
Формулировка задачи:
Здравствуйте, помогите пожалуйста переписать две программы на Lisp. Они у меня на прологе, но не выходит на лисп.
Это программа по работе со списками. Множества заданы списками строк L1 и L2. Получить в виде списка L3 множество L1\L2.
Помогите пожалуйста переписать. Заранее спасибо
Решение задачи: «Работа со списками и умножение многочленов»
textual
Листинг программы
CL-USER> (defun foo (&rest sets) (let ((rests (rest sets))) (loop for i in (first sets) when (not (remove nil (mapcar #'(lambda (s) (member i s)) rests))) collect i))) FOO CL-USER> (foo '(1 2 3 4) '(3 4) '(4 5)) (1 2) CL-USER>
Объяснение кода листинга программы
В этом коде определен функтор foo
, который принимает произвольное количество списков в качестве аргументов.
Внутри функции используется let
для создания переменной rests
, которая содержит все аргументы, кроме первого.
Затем используется loop
для итерации по каждому из списков, кроме первого.
when
проверяет, является ли текущий список пустым. Если это не так, он удаляет все вхождения числа i
из списка, используя remove
и mapcar
.
Если после этого список все еще не пустой, i
добавляется в результат, используя collect
.
В конце функция возвращает результат, который в данном случае будет списком, содержащим только число 1.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д