221V 3 лет назад
Родитель
Сommit
9c8b8eac6c
1 измененных файлов с 83 добавлено и 0 удалено
  1. 83 0
      src/test1.pl

+ 83 - 0
src/test1.pl

@@ -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 
+
+*/
+
+