Список из разных элементов двух списков - Lisp
Формулировка задачи:
Здраствуйте очень нужна помощь в написании простой програмы : создать новый список из елемнтов одного списка которых нету в другом \ списки должны задаваться из командной строки
тоесть :
(f '(1 2 3 4)'(1 2 5 6 7 8))
==> (3 4 5 6 7 8)
вот что я пробовал сделать
мои знания лиспа очень скудны все темы на форуме уже просмотрел по даному вопросу
(defun c:enter(/)
(initget 7)
(setq mas () n 0 mas1 () mas2 () mas3() mas4())
(setq i 0)
(initget 7)
(setq v (getint "Введите количество ел списка 1: "))
(repeat v
(setq i(+ i 1))
(setq mas (list(getint(strcat "Введите " (itoa i) "елемент списка: " ))))
(setq mas1 (append mas1 mas))
);/repead
(setq i 0)
(setq r (getint "Введите количество ел списка 2: "))
(repeat r
(setq i(+ i 1))
(setq mas (list(getint(strcat "Введите " (itoa i) "елемент списка: " ))))
(setq mas3 (append mas3 mas))
);
(princ mas3)
(princ mas1)
(initget 7)
/ вот тут пробовал задействовать етот код :
(defun clear (w &rest v)
(loop for a in w
unless (member a (loop for b in v append b))
collect a))
/ и ничево не получается
(princ)
)Решение задачи: «Список из разных элементов двух списков»
textual
Листинг программы
(defun task nil (let ((lst1 (progn (print "Enter 1-st list") (read))) (lst2 (progn (print "Enter 2-nd list") (read)))) (sym-diff lst1 lst2))) ==> TASK (task) "Enter 1-st list" (1 2 3 4 5 6) "Enter 2-nd list" (4 5 6 7 8 9) ==> (1 2 3 7 8 9)
Объяснение кода листинга программы
В коде определена функция task, которая принимает два аргумента, но в данном случае они не используются.
В функции используется конструктор списка progn, который выполняет два действия: выводит сообщение Enter 1-st list и читает список, затем выводит сообщение Enter 2-nd list и читает второй список.
Далее выполняется операция разности множеств sym-diff с двумя списками, в результате чего получается список элементов, которые присутствуют только в первом или только во втором списке.
Например, если первый список — (1 2 3 4 5 6), а второй список — (4 5 6 7 8 9), то результатом выполнения функции будет (1 2 3 7 8 9).