0

問題は、データベース内の製品を参照できる述語をプログラムして、価格が引き下げられた製品の名前で満たされたリストを返すようにする必要があることです (「状態」によって示されます)。

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).

それは有り難いです。今、それは私に3つの異なる解決策を提供します. どうすれば述語に 1 つの解決策を与えるように強制できますか? 実際、最後の 1 つですか?

4

2 に答える 2

0

リストの最初の製品が減額されていない場合はどうでしょうか。その場合のルールはありません。

于 2012-01-05T19:38:57.410 に答える
0

私は visual-prolog を使用していないので、doc で見つけたものを提案します。

reduced(List) :-
    List = [ Price || producte(_, Price, reduced) ].
于 2012-01-05T18:00:56.720 に答える