Пролог - Упражнение по фактам и спискам - PullRequest
0 голосов
/ 05 января 2012

Проблема заключается в том, что мне нужно запрограммировать предикат, способный обращаться к продуктам в базе данных, чтобы он возвращал список, заполненный названиями продуктов, цены на которые были снижены (что указано "состоянием".

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 ]

0 голосов
/ 05 января 2012

Как насчет того, когда первый товар в списке НЕ сокращается - у вас нет правила для этого случая.

0 голосов
/ 05 января 2012

Поскольку я не использую визуальный пролог, я просто предложу кое-что, что я нашел в документе .

reduced(List) :-
    List = [ Price || producte(_, Price, reduced) ].
...