Выбрать породы собак по характеристикам - Prolog
Формулировка задачи:
Здравствуйте
Столкнулся с проблемой, которую своими силами преодолеть не получилось.
Нужно сформировать список пород собак выбирая по характеристикам: форма ушей, окрас.
Вот что получилось, код рабочий:
Теперь, нужно реализовать возможность выбора породы не указывая некоторые характеристики.
Например опустить окрас.
Если поставить цель
То возникает предупреждение и ошибка.
Курсор указывает на ошибку в 19 строке
Листинг программы
- domains
- list = Symbol*
- predicates
- dog(Symbol poroda,Symbol ushi,Symbol okras)
- getDogsList(Symbol poroda,Symbol ushi,list,list)
- member(Symbol,list)
- clauses
- dog(ovcharka,stoyat,chornyi).
- dog(dalmatin,visyat,chernobelyi).
- dog(doberman,stoyat,chornyi).
- member(Elem, [Elem|_Tail]).
- member(Elem, [_Head|Tail]):-member(Elem, Tail).
- getDogsList(Ushi,Okras,L,DogsList):-
- dog(X,Ushi,Okras),
- not(member(X,L)),
- getDogsList(Ushi,Okras,[X|L],DogsList).
- getDogsList(_,_,X,X).
- goal
- getDogsList(stoyat,chornyi,[],DogsList),write(DogsList). %["doberman","ovcharka"]
Листинг программы
- getDogsList(stoyat,_,[],DogsList),write(DogsList).
Листинг программы
- W;dogs.pro, pos: 497, 708 The variable is not bound in this clause _
- E;dogs.pro, pos: 497, 721 Basic domain becomes reference domain: symbol
getDogsList(_,|_,X,X)
. Как можно сформировать список указав не все характеристики породы?Решение задачи: «Выбрать породы собак по характеристикам»
textual
Листинг программы
- getDogsList(Ushi,Okras,DogsList):-
- findall(X, dog(X,Ushi,Okras), DogsList).
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д