|
@@ -0,0 +1,83 @@
|
|
|
+:-module(test1,
|
|
|
+ [limit_for_1_tr/3,
|
|
|
+ limit_for_1_tr2/3,
|
|
|
+ test/0]).
|
|
|
+
|
|
|
+/*
|
|
|
+1. Описать два лимита на разовую транзакцию, используя Пролог.
|
|
|
+ Описание вида: limit_for_1_tr(Country, LimitSum, LimitCurrency).
|
|
|
+ a. Описать лимит на одну транзакцию в Украине. Сумма лимита - 30 000 грн
|
|
|
+ b. Описать лимит на одну транзакцию в России. Сумма лимита - 50 000 рублей
|
|
|
+*/
|
|
|
+
|
|
|
+
|
|
|
+% limit_for_1_tr(Country, LimitSum, LimitCurrency). % сума ліміту в грн (не в копійках); ліміт включно
|
|
|
+limit_for_1_tr(uk, LimitSum, uah) :- integer(LimitSum), LimitSum =< 30_000.
|
|
|
+limit_for_1_tr(ru, LimitSum, rub) :- integer(LimitSum), LimitSum =< 50_000.
|
|
|
+
|
|
|
+% limit_for_1_tr2(Country, LimitSum, LimitCurrency). % сума ліміту в копійках; ліміт включно
|
|
|
+limit_for_1_tr2(uk, LimitSum, uah) :- integer(LimitSum), LimitSum =< 30_000_00.
|
|
|
+limit_for_1_tr2(ru, LimitSum, rub) :- integer(LimitSum), LimitSum =< 50_000_00.
|
|
|
+
|
|
|
+
|
|
|
+test() :-
|
|
|
+ %write("test limit_for_1_tr:"), nl,
|
|
|
+ Values1 = [[uk, 29_999, uah], [uk, 30_000, uah], [uk, 30_001, uah],
|
|
|
+ [uk, 1, rub], [zz, 0, uah]],
|
|
|
+ test1(Values1), % testing limit_for_1_tr/3
|
|
|
+ nl,
|
|
|
+ Values2 = [[uk, 29_999_99, uah], [uk, 30_000_00, uah], [uk, 30_000_01, uah],
|
|
|
+ [ru, 49_999_99, rub], [ru, 50_000_00, rub], [ru, 50_000_01, rub],
|
|
|
+ [uk, 7, rub], [zz, -1, uah]],
|
|
|
+ test1_2(Values2). % testing limit_for_1_tr2/3
|
|
|
+
|
|
|
+test1([]) :- true.
|
|
|
+test1([V|T]) :-
|
|
|
+ [C, V1, C2] = V,
|
|
|
+ limit_for_1_tr(C, V1, C2),
|
|
|
+ %write(limit_for_1_tr(C, V1, C2)), write(" -> true"), nl,
|
|
|
+ format("~w -> ~w~n", [limit_for_1_tr(C, V1, C2), true]),
|
|
|
+ test1(T);
|
|
|
+ % якщо ліміт не true, тоді таки false (:
|
|
|
+ format("limit_for_1_tr(~w,~w,~w) -> false~n", V),
|
|
|
+ test1(T).
|
|
|
+
|
|
|
+
|
|
|
+test1_2(L) :-
|
|
|
+ forall(member(V0, L),
|
|
|
+ ([C, V, C2] = V0,
|
|
|
+ limit_for_1_tr2(C, V, C2),
|
|
|
+ format("~w -> ~w~n", [limit_for_1_tr2(C, V, C2), true]);
|
|
|
+ % ліміт false
|
|
|
+ [C, V, C2] = V0,
|
|
|
+ format("limit_for_1_tr2(~w,~w,~w) -> false~n", V0)
|
|
|
+ )).
|
|
|
+
|
|
|
+
|
|
|
+/*
|
|
|
+
|
|
|
+$ prolog
|
|
|
+
|
|
|
+?- consult(test1).
|
|
|
+true.
|
|
|
+
|
|
|
+?- test().
|
|
|
+limit_for_1_tr(uk,29999,uah) -> true
|
|
|
+limit_for_1_tr(uk,30000,uah) -> true
|
|
|
+limit_for_1_tr(uk,30001,uah) -> false
|
|
|
+limit_for_1_tr(uk,1,rub) -> false
|
|
|
+limit_for_1_tr(zz,0,uah) -> false
|
|
|
+
|
|
|
+limit_for_1_tr2(uk,2999999,uah) -> true
|
|
|
+limit_for_1_tr2(uk,3000000,uah) -> true
|
|
|
+limit_for_1_tr2(uk,3000001,uah) -> false
|
|
|
+limit_for_1_tr2(ru,4999999,rub) -> true
|
|
|
+limit_for_1_tr2(ru,5000000,rub) -> true
|
|
|
+limit_for_1_tr2(ru,5000001,rub) -> false
|
|
|
+limit_for_1_tr2(uk,7,rub) -> false
|
|
|
+limit_for_1_tr2(zz,-1,uah) -> false
|
|
|
+true
|
|
|
+
|
|
|
+*/
|
|
|
+
|
|
|
+
|