Удалить из второго списка все вхождения головы первого списка - Prolog
Формулировка задачи:
2. Даны 2 списка. Удалить из второго все вхождения головы первого списка.
Решение задачи: «Удалить из второго списка все вхождения головы первого списка»
textual
Листинг программы
delall(_,[],[]). delall(H,[H|T],Z) :- delall(H,T,Z). delall(H,[Q|T],[Q|Z]) :- H<>Q, delall(H,T,Z).
Объяснение кода листинга программы
В данном коде реализована логика удаления всех вхождений головы первого списка из второго списка.
delall(_,[],[]).- если первый список пустой, то есть не содержит элементов, то в результате будет также пустой список.delall(H,[H|T],[]).- если в первом списке есть элемент, который совпадает с головой второго списка, то этот элемент удаляется из второго списка, и в результате возвращается пустой список.delall(H,[Q|T],[Q|Z]) :- H<>Q, delall(H,T,Z).- если элемент головы первого списка не совпадает с головой второго списка, то рекурсивно вызывается функцияdelallдля оставшихся элементов первого списка и нового списка, который состоит из всех элементов второго списка, кроме головы. В результате возвращается новый список без головы.