Файл ins.pro
/* Выделение подгруппы элементов по признаку */
domains
/* Нижнее пороговое значение */
low=symbol
/* Верхнее пороговое значение */
high=symbol
list=symbol *
predicates
sub_list(low,high,list,list,list)
clauses
/* Выделение в первую подгруппу */
sub_list(Low,High,[H|T],L1,[H|L2]):-
H
/* Выделение во вторую подгруппу */
sub_list(Low,High,[H|T],[H|L1],L2):-
H>=Low,H<=High,sub_list(Low,High,T,L1,L2).
/* Добавление второго подсписка */
sub_list(Low,High,[H|T],L1,[H|L2]):-
sub_list(Low,High,T,L1,L2),H>High.
sub_list(_,_,[],[],[]).
Необходимо выделить в списке группу элементов по какому-либо признаку, например в подгруппе должны быть элементы со значениями <= нижнего порога и >= верхнего порога. Оставшиеся элементы занесутся во второй подсписок.
Выделение происходит в следующей последовательности:
1. Текущий элемент начального списка сравнивается на <= нижнего и >= верхнего порогов , в случае успеха записывается в L1
2. В случаях неуспеха п.1 выполняется первый и третий варианты правила и значения записываются в L2.
Цели могут быть такими: split(“b”,“c”,[“a”,”b”,”c”],L1,L2); split(“c”,“b”,[“a”,”b”,”c”],L1,L2)
|