Работа со списками и умножение многочленов - 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.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 3.7 из 5