Advertisement
Guest User

Untitled

a guest
Jan 21st, 2020
102
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Prolog 3.69 KB | None | 0 0
  1. nat(c).
  2. nat(s(X)):-nat(X).
  3. sum(X,c,X).
  4. sum(X,s(Y),s(Z)):-sum(X,Y,Z).
  5. interpret(0,c).
  6. interpret(N,s(X)):-interpret(M,X),N is M+1.
  7. gen(0,c).
  8. gen(N,s(X)):-N>0,M is N-1,gen(M,X).
  9. bezout(X,0,X,1,0).
  10. bezout(X,Y,D,U,V):-X>=Y,Y>0,X1 is X-Y,bezout(X1,Y,D,U,V1),V is V1-U.
  11. bezout(X,Y,D,U,V):-X<Y,bezout(Y,X,D,V,U).
  12. fib(X,X):-X=<1.
  13. fib(N,F):-N>=2,fib(N-1,F1),fib(N-2,F2),F is F1+F2.
  14. fib2(0,0,1).
  15. fib2(N,F1,F2):-N>0,N1 is N-1,fib2(N1,F3,F1),F2 is F1+F3.
  16. mem(X,[X|_]).
  17. mem(X,[_|L]):-mem(X,L).
  18. reverse([],L1,L1).
  19. reverse([X|L2],L1,R):-reverse(L2,[X|L1],R).
  20. rev(L,R):-reverse(L,[],R).
  21. cat([],Y,Y).
  22. cat([A|L],Y,[A|Z]):-cat(L,Y,Z).
  23. mem2(X,L):-cat(_,[X|_],L).
  24. perm([],[]).
  25. perm([A|L1],P):-perm(L1,P1),cat(P2,P3,P1),cat(P2,[A|P3],P).
  26. ordered([]).
  27. ordered([_]).
  28. ordered([A,B|L]):-A=<B,ordered([B|L]).
  29. sort2(L,S):-permutation(L,S),ordered(S).
  30. unordered(S):-cat(_,[A,B|_],S),A>B.
  31. sort3(L,S):-perm(L,S),not(unordered(S)).
  32. edge(E,U,V):-mem([U,V],E).
  33. edge(E,U,V):-mem([V,U],E).
  34. nonhamiltonian(E,H):-cat(_,[U,V|_],H),not(edge(E,U,V)).
  35. hamiltonian(V,E,H):-perm(V,H),not(nonhamiltonian(E,H)).
  36. subword(L,W):-cat(_,V,L),cat(W,_,V).
  37. subsequence([],[]).
  38. subsequence([A|L],[A|S]):-subsequence(L,S).
  39. subsequence([_|L],S):-subsequence(L,S).
  40. subset(V,_,V1):-subsequence(V,V1).
  41. is_not_clique(E,V1):-mem(U,V1),mem(W,V1),U\=W,not(edge(E,U,W)).
  42. is_clique(E,V1):-not(is_not_clique(E,V1)).
  43. clique(V,E,V1):-subset(V,E,V1),is_clique(E,V1).
  44. len([],0).
  45. len([_|L1],N):-len(L1,N1),N is N1+1.
  46. clique_size(V,E,V1,N1):-clique(V,E,V1),len(V1,N1).
  47. exists_bigger_clique(V,E,N):-clique_size(V,E,_,N1),N1>N.
  48. max_clique(V,E,V1):-clique_size(V,E,V1,N1),not(exists_bigger_clique(V,E,N1)).
  49. between2(I,J,I):-I=<J.
  50. between2(I,J,K):-I<J,I1 is I+1,between2(I1,J,K).
  51. all_functions([],_,[]).
  52. all_functions([A|V1],K,[[A,K1]|C1]):-between2(1,K,K1),all_functions(V1,K,C1).
  53. is_not_colouring(_,E,C):-mem([U,K],C),mem([W,K],C),edge(E,U,W).
  54. is_colouring(_,E,C):-not(is_not_colouring(_,E,C)).
  55. colouring(V,E,K,C):-all_functions(V,K,C),is_colouring(V,E,C).
  56. merge1(S1,[],S1).
  57. merge1([],[A|S2],[A|S2]).
  58. merge1([A|S1],[B|S2],[A|S]):-A=<B,merge1(S1,[B|S2],S).
  59. merge1([A|S1],[B|S2],[B|S]):-A>B,merge1([A|S1],S2,S).
  60. split1(L,L1,L2):-cat(L1,L2,L),len(L1,N1),len(L2,N2),N1-N2=<1,N1>=N2.
  61. split([],[],[]).
  62. split([A],[A],[]).
  63. split([A,B|L],[A|L1],[B|L2]):-split(L,L1,L2).
  64. merge_sort([],[]).
  65. merge_sort([A],[A]).
  66. merge_sort([A,B|L],S):-split([A,B|L],L1,L2),merge_sort(L1,S1),merge_sort(L2,S2),merge1(S1,S2,S).
  67. transition_det(Q,T,S,F,P,A,P1):-mem([P,A,P1],T).
  68. traverse_det(Q,T,S,F,P,[],P).
  69. traverse_det(Q,T,S,F,P,[A|W1],P1):-transition_det(Q,T,S,F,P,A,P2),traverse_det(Q,T,S,F,P2,W1,P1).
  70. recognise_det(Q,T,S,F,W):-traverse_det(Q,T,S,F,S,W,P),mem(P,F).
  71. natural(0).
  72. natural(X):-natural(Y),X is Y+1.
  73. graph_g1(M,0,Y):-M mod 2 =:=1,Y is (M-1)/2.
  74. graph_g1(M,X,Y):-M mod 2 =:=0,M1 is M/2,graph_g1(M1,X1,Y),X is X1+1.
  75. pairs(X,Y):-natural(N),M is N+1,graph_g1(M,X,Y).
  76. genA(N,X,Y):-between2(0,N,X),Y is N-X.
  77. pairs2(X,Y):-natural(N),genA(N,X,Y).
  78. genBoundedSeq(N,M,[]):-M>=0.
  79. genBoundedSeq(N,M,[A]):-M>=1,between2(0,N,A).
  80. genBoundedSeq(N,M,[A|[B|L]]):-M>=2,M1 is M-1,genBoundedSeq(N,M1,[B|L]),B1 is B-1,between2(0,B1,A).
  81. genSet(S):-pairs2(N,M),genBoundedSeq(N,M,S).
  82. genRelation([],[]).
  83. genRelation([N|M],[[X,Y]|R]):-between2(0,N,X), Y is N-X,genRelation(M,R).
  84. irreflexive(R):-mem2([X,_],R),not(mem2([X,X],R)).
  85. irreflexive(R):-mem2([_,X],R),not(mem2([X,X],R)).
  86. reflexive(R):-not(irreflexive(R)).
  87. asymmetric(R):-mem2([X,Y],R),not(mem2([Y,X],R)).
  88. symmetric(R):-not(asymmetric(R)).
  89. intransitive(R):-mem2([X,Y],R),mem2([Y,Z],R),not(mem2([X,Z],R)).
  90. transitive(R):-not(intransitive(R)).
  91. genFiniteEquivalenceRelations(R):-genSet(S),genRelation(S,R),reflexive(R),symmetric(R),transitive(R).
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement