Пролог - Упражнения на факты и списки
Проблема заключается в том, что мне нужно запрограммировать предикат, способный обращаться к продуктам в базе данных, чтобы он возвращал список, заполненный названиями продуктов, цены на которые были снижены (что обозначается "состоянием").
domains
state = reduced ; normal
element = string
list = element*
database
producte (string, integer, state)
predicates
nondeterm reduced(list)
clauses
% ---> producte( description , price , state )
producte("Enciam",2,reduced).
producte("Peix",5,normal).
producte("Llet",1,reduced).
producte("Formatge",5,normal).
%unique case
reduced([D]):-
producte(D,_,reduced).
%general case
reduced([D|L]) :-
producte(D,_, reduced),retract(producte(D,_,reduced)),reduced(L).
Goal
reduced(List).
Я ценю его. Теперь это дает мне три разных решения. Как я мог заставить предикат дать мне одно решение? На самом деле, последний?
2 ответа
Решение
Так как я не использую визуальный пролог, я просто предложу кое-что, что я нашел в документе.
reduced(List) :-
List = [ Price || producte(_, Price, reduced) ].
Как насчет того, когда первый товар в списке НЕ сокращается - у вас нет правила для этого случая.