@fantom0005

У меня не завершается рекурсия в предикате. Что сделать?

Ребят, привет! Мне нужно сделать на прологе поиск по факту по нескольким параметрам, которые меняются динамически. Я так понимаю, что нужно сделать список с id фактами и потом ненужные элементы удалять из этого списка или создавать новый список с нужными элементами. Факт у меня - сноуборд, ест id, Brand и много разных параметров. Я написал предикат, который по бренду создает новый LIST, но этот предикат не выходит из рекурсии. Помогите!!!
class predicates
    member : (integer, integer*) nondeterm (i,i).
clauses
    member(X,[Y|_]):-
        X=Y,!.
    member(X,[_|Y]):-
        member(X,Y).

class predicates
    createListId : (integer*, integer*) nondeterm (i,o).
clauses
    createListId(List, Out) :-
       snowboard(Id,_,_,_,_,_,_),
       not(member(Id,List)),!,
       createListId([Id|List],Out).
       createListId(A,A).

class predicates
    cutBrand : (string, integer*, integer*) nondeterm anyflow.
clauses
    cutBrand(_,[], _).
    cutBrand(Brand, [H|T], NewList):-
        snowboard(H, B,_,_,_,_,_),
        Brand=B,!,
        cutBrand(Brand,T,[H|NewList]).
    cutBrand(Brand, [H|T], NewList):-
        cutBrand(Brand,T,NewList).
    cutBrand(_,A,A).
  • Вопрос задан
  • 160 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы