Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.144.36.141] |
|
Сообщ.
#1
,
|
|
|
Задачки легки, просто я не понимаю пролог после С++ и полоса у меня в жизни не светлая пошла, да и сессия, курсовик, все в раз поставили, поэтому вся надежда только на вас!:(
1.Создайте предикат, находящий предпоследний элемен списка (список одноуровневый). 2.Создайте предикат, который будет находить последнию позицию вхождения данного элемента в список. 3.Предикат delev2 для разбивки списка на уровни. Пример: исходный список [a,b,c] результирующий список [[[a],b],c]. 4.Предикат delev1 для уничтожения уровней в списке. Пример: исходный список [a,[b,[c]]], результирующий список [a,b,c]. Предикат intersect для пересечения двух множеств. |
Сообщ.
#2
,
|
|
|
Решения :
3. разбивка списка на уровни, прим. [a,b,c] - [a,[b,[c]]] split([H|[]],[H]). split([H|T],[H|[T1]]):-split(T,T1). (Правда для сложных случ. по типу [[a|b]|[c|d]] не будет обработки.) 4. линеаризация(уничтожение многоуровневости списка к пр. [a,[b,[c]]] - [a,b,c]) lineariz([H|T],L1):-lineariz(H,LS),lineariz(T,LS2),!,union_lists(LS,LS2,L1). lineariz([],[]). lineariz(H,[H]). (а вот здесь любая сложность списка ни по чем) обьединение списков union_lists([],L,L). union_lists([H1|T1],L,[H1|T3]):-union_lists(T1,L,T3). обращение списка reverse1([], []). reverse1([H|T],Z):-reverse1(T,S),union_lists(S,[H],Z). отношение принадлежности элемента списку elem(H,[H|_]). elem(H,[_|T]):-elem(H,T). пересечение двух списков inters([],_,[]). inters([H|T1],L,[H|T3]):-elem(H,L),!,inters(T1,L,T3). inters([H|T],L,L2):-inters(T,L,L2). |