Создать список атомов, которые есть в первым списке, но нету во втором - Lisp
Формулировка задачи:
Здраствуйте!В данный момент начал изучать лисп и столкнулся с проблемой в решение задачи:
К примеру есть два списка из случайных атомов,используя рекурсию надо создать список атомов которые есть в первым списке но нету во втором, учитывая все атомы всех подсписков обоих списковю
Буду очень блогодарен за помощь
Решение задачи: «Создать список атомов, которые есть в первым списке, но нету во втором»
textual
Листинг программы
(defun flat (lst) (cond ((null lst) nil) ((atom (car lst)) (cons (car lst) (flat (cdr lst)))) (t (append (flat (car lst)) (flat (cdr lst)))))) ==> FLAT (flat '(a b ((c d)))) ==> (A B C D) (defun set-of (lst) (cond ((null lst) nil) (t (cons (car lst) (set-of (remove (car lst) (cdr lst))))))) ==> SET-OF (set-of '(1 2 3 1 2 3)) ==> (1 2 3) (defun task (lst1 lst2) (let ((s1 (set-of (flat lst1))) (s2 (set-of (flat lst2)))) (remove-if (lambda (x) (member x s2)) s1))) ==> TASK (task '(1 2 3 4) '(3 4 5 6)) ==> (1 2)
Объяснение кода листинга программы
В коде реализованы три функции:
- flat — принимает на вход список
lst
и возвращает список, полученный путём применения функции car к каждому элементу исходного списка, пока не будет достигнуто окончание списка. Если элемент является атомом, то он добавляется в результирующий список. - set-of — принимает на вход список
lst
и возвращает список, содержащий все уникальные элементы изlst
. - task — принимает на вход два списка
lst1
иlst2
и возвращает список, содержащий все элементы изlst1
, которые отсутствуют вlst2
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д