Advertisement
PonaFly

First prolog practice

Sep 14th, 2016
248
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Prolog 2.09 KB | None | 0 0
  1.   %#4
  2.   %Предикат даблфак принимает два аргумента,запускает проверку на четность числа N
  3.   doublefac(N,Res) :-
  4.   integer(N),integer(Res),
  5.   even(N,Res).
  6.   %В зависимости от четности числа подаем в главный предикат цифру,с которой начинаем умножение
  7.   even(N,Res):-
  8.   0 is N mod 2 , main(N,Res,2).
  9.   even(N,Res):-
  10.   1 is N mod 2 , main(N,Res,1).
  11.  
  12.   %Если изменяемое N и заданный нам факториал совпали,то true,а иначе продолжаем проверку до тех пор
  13.   %пока число N меньше заданного факториала
  14.   main(X,X,K).
  15.   main(N,Res,K):-
  16.   N<Res, N1 is N*K, K1 is K+2, main(N1,Res,K1).
  17.  
  18.   %тесты: doublefac(4,8).(true) doublefac(5,15).(true) doublefac(4,5)(false). doublefac(5,16).(false)
  19.  
  20.   %#5
  21.   even(N):-
  22.   0 is N mod 2.
  23.  
  24.   %тесты even(3). even(4). even(6).
  25.  
  26.   %#6 проверка на простоту.
  27.  
  28.   % запомним К-как корень из N (для ускорения алгоритма определения простоты)
  29.   simple(N):-
  30.   integer(N),K is sqrt(N),check(N,K,2).
  31.  
  32.   %если накапливаемое I стало больше корня,то результат тру,иначе продолжаем проверку.
  33.   check(N,K,I):-
  34.   I>K.
  35.   check(N,K,I):-
  36.   (I<K;I=K),0 =\= N mod I,I1 is I+1,check(N,K,I1).
  37.  
  38.   %тесты: simple(3). simple(128). simple(71). simple(243). true false true false
  39.  
  40.   %#7 сиракузская пос-ность
  41.   sirakuz(N,A0):-
  42.   number(N),number(A0),building(N,A0,0).
  43.   %N-кол-во элементов в послед,А0-нач.элемент,К-счетчик элементов.
  44.   building(N,A,K):-
  45.   K<N,0 is A mod 2,write(A),write(' '),A1 is A//2,K1 is K+1,building(N,A1,K1).
  46.   building(N,A,K):-
  47.   K<N,1 is A mod 2,write(A),write(' '),A1 is 3*A+1,K1 is K+1,building(N,A1,K1
  48.  
  49.   %тесты:sirakuz(5,69). sirakuz(3,4). sirakuz(4,58).
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement