|
@@ -0,0 +1,65 @@
|
|
|
+:-module(test3,
|
|
|
+ [bonus_check/4,
|
|
|
+ test/0]).
|
|
|
+
|
|
|
+
|
|
|
+/*
|
|
|
+
|
|
|
+3. Описать правило акции супермаркета, используя Пролог.
|
|
|
+ Правило: если покупатель купил товар с кодом 5111 акционной группы 565,
|
|
|
+ то ему начисляются двойные бонусы на счет за данный товар.
|
|
|
+ Сумма покупки - 50 грн.
|
|
|
+ Описание вида: bonus_check(GroupProduct, ProductID, CostProduct, Bonus).
|
|
|
+
|
|
|
+*/
|
|
|
+
|
|
|
+% bonus_check(GroupProduct, ProductID, CostProduct, Bonus). % CostProduct в копійках
|
|
|
+bonus_check(565, 5111, 50_00, _Bonus).
|
|
|
+
|
|
|
+
|
|
|
+% для акційного товару бонус (% від суми) подвоюється
|
|
|
+test() :-
|
|
|
+ Items = [[1, 2, 5_00, 5], [1, 3, 10_00, 5], [2, 5, 150_00, 5],
|
|
|
+ [2, 255, 7_500_00, 5], [565, 5171, 50_00, 10], [565, 5111, 50_00, 10]],
|
|
|
+ test1(Items).
|
|
|
+
|
|
|
+test1([]) :- true.
|
|
|
+test1([V|T]) :-
|
|
|
+ [G, P, C, B] = V,
|
|
|
+ bonus_check(G, P, C, B),
|
|
|
+ format("~w -> ~w", [bonus_check(G, P, C, B), true]),
|
|
|
+ bonus_calc(true, B, C),
|
|
|
+ test1(T);
|
|
|
+ % bonus false
|
|
|
+ format("bonus_check(~w,~w,~w,~w) -> false", V),
|
|
|
+ [_G, _P, C, B] = V,
|
|
|
+ bonus_calc(false, B, C),
|
|
|
+ test1(T).
|
|
|
+
|
|
|
+bonus_calc(true, B, C) :-
|
|
|
+ Bonus_Value is floor((B * 2 * C) / 100),
|
|
|
+ format(" ; Bonus value = ~w~n", [Bonus_Value]).
|
|
|
+bonus_calc(_D, B, C) :-
|
|
|
+ Bonus_Value is floor((B * C) / 100),
|
|
|
+ format(" ; Bonus value = ~w~n", [Bonus_Value]).
|
|
|
+
|
|
|
+
|
|
|
+/*
|
|
|
+
|
|
|
+$ prolog
|
|
|
+
|
|
|
+?- consult(test3).
|
|
|
+true.
|
|
|
+
|
|
|
+?- test().
|
|
|
+bonus_check(1,2,500,5) -> false ; Bonus value = 25
|
|
|
+bonus_check(1,3,1000,5) -> false ; Bonus value = 50
|
|
|
+bonus_check(2,5,15000,5) -> false ; Bonus value = 750
|
|
|
+bonus_check(2,255,750000,5) -> false ; Bonus value = 37500
|
|
|
+bonus_check(565,5171,5000,10) -> false ; Bonus value = 500
|
|
|
+bonus_check(565,5111,5000,10) -> true ; Bonus value = 1000
|
|
|
+true
|
|
|
+
|
|
|
+*/
|
|
|
+
|
|
|
+
|