? users online
  • Logout
    • Open hangout
    • Open chat for current file
<div class="notebook">

<div class="nb-cell program" name="p1">
%1 параметр- ?,2 параметр исходный список, 3,4 параметры результирующий
front(0,C,[],C). %если исходный список пуст ,то два списка результирующие пусты
front(N,[H|T],[H|B],C):-%если исходный список не пуст ,то второй список можно разбить на голову и хвост,голова будет исходного списка ,хвост другой,остальные элементы в списке С.
    Nn is N-1,%действие Nn=N-1
    front(Nn,T,B,C). %шаг рекурсии с параметрами 
 
split(A,B,C):- %А-исходный список,B и C результирующие 
    length(A,L), %нахождение длины списка L
    N is L div 2, %в N записываем разделенный список
    front(N,A,B,C). %шаг рекурсии
</div>

<div class="nb-cell program" name="p2">
add(A,X,[A|X]).
del(_,[],[]).
del(A,[A|T],T) :- !.
del(A,[H|T],[H|R]) :- del(A,T,R).
</div>

<div class="nb-cell program" name="p3">
task([_],0).
task([X,X|T],R) :- task([X|T],R), !.
task([_,X|T],R) :- task([X|T],R1), R is R1+1.
</div>

<div class="nb-cell program" name="p4">
setof([],[]).
setof([H|T],R) :- member(H,T), setof(T,R), !.
setof([H|T],[H|R]) :- setof(T,R). 

mkprod(_,[],[]).
mkprod(V,[H|T],[W|R]) :- W is V*H, mkprod(V,T,R).

cart([],_,[]).
cart(_,[],[]).
cart([H|T],V,U) :- mkprod(H,V,W), cart(T,V,Q), append(Q,W,U).

task(X,Y,R) :- cart(X,Y,W), setof(W,R).
</div>

<div class="nb-cell program" name="p5">
rem_all([],_,[]).
rem_all([X|T],X,[X|R]) :- rem_all(T,X,R).
rem_all([Y|T],X,R) :- X \= Y, rem_all(T,X,R).

ordered_by(_,[],[]).
ordered_by(A,[H|T],U) :- rem_all(A,H,Q), ordered_by(A,T,W),append(Q,W,U).
</div>

<div class="nb-cell program" name="p6">
playingSport("Boris", "Football").
playingSport("Nikolay", "Football").
playingSport("Andrey", "Tennis").
   
hasSpecialty("Boris", "Worker").
hasSpecialty("Nikolay", "Worker").
hasSpecialty("Andrey", "Trainer").

haveCommonInterests(X,Y,C) :- playingSport(X,C),playingSport(Y,C).
haveCommonInterests(X,Y,C) :- hasSpecialty(X,C),hasSpecialty(Y,C).
</div>

<div class="nb-cell program" name="p7">
point(1.0, 1.0).
point(1.0, 2.0).
point(1.0, 4.0).
point(2.0, 1.0).
point(2.0, 2.0).
point(2.0, 4.0).
point(3.0, 2.0).
point(4.0, 1.0).
point(4.0, 3.0).

task_a(X,Y) :- point(X,Y).
task_b(X,Y):- point(X,Y), T is X+Y, T == 5.0.
task_c(X1,Y1,X2,Y2) :- point(X1,Y1), point(X2,Y2), X1 == Y2, X2 == Y1.
task_e(X,Y) :- point(X,Y), T is 0.6*X+0.4, Y == T.
task_f(X,Y) :- point(X,Y), T is 0.6*X+0.4, Y &gt; T.
task_g(X,Y) :- point(X,Y), Rx is abs(X-2), Ry is abs(Y-1), Rx =&lt; 1, Ry =&lt; 1.
task_h(X,Y) :- point(X,Y), R is (X-1)*(X-1)+(Y-2)*(Y-2), R &gt; 1.44.
</div>

<div class="nb-cell program" name="p8">
num(1).
num(2).
num(6).
num(3).
isEven(X) :- num(X), Q is X mod 2, Q == 0.
lst(B) :- bagof(X,isEven(X),B).
</div>

<div class="nb-cell program" name="p9">
is_incr([_]).
is_incr([H1,H2|T]) :- H2&gt;H1, is_incr([H2|T]),!;fail.

gi([X],[X]).
gi([H1,H2|T],[H1|R]) :- H2&gt;H1, gi([H2|T],R).
gi([H1,H2|_],[H1]) :- H2 =&lt; H1.

drop(X,0,X).
drop([_|H],N,R) :- N1 is N-1, drop(H,N1,R).

list_incr([],[]).
list_incr(X,[R|T]) :- gi(X,R),length(R,L),drop(X,L,Xx),list_incr(Xx,T).

max_len_list([],[]).
max_len_list([A|T],X) :- max_len_list(T,X),length(A,La), length(X,Lx),  Lx &gt; La.
max_len_list([A|T],A) :- max_len_list(T,X),length(X,Lx),length(A,La), La &gt; Lx, !.

task(X,R) :- list_incr(X,Lx),max_len_list(Lx,R).
</div>

<div class="nb-cell program" name="p10">
take(_,0,[]) :- !.
take([H|T],N,[H|R]) :- N1 is N-1, take(T,N1,R).

drop(X,0,X) :- !.
drop([_|H],N,R) :- N1 is N-1, drop(H,N1,R).

task(P,X,0):- length(P,Lp),length(X,Lx), Lp &gt; Lx.
task(P,X,C):- length(P,Lp), take(X,Lp,Px), Px == P, drop(X,Lp,Dx),
    task(P,Dx,C1), C is C1+1.
task(P,X,C):- length(P,Lp), take(X,Lp,Px), Px \= P, drop(X,1,Dx),
    task(P,Dx,C).
</div>

<div class="nb-cell program" name="p11">
%% Проверка на простоту

isP(2,_,1).
isP(N,K,1) :- K*K&gt;N,!.
isP(N,K,0) :- Q is N mod K, Q==0,!.
isP(N,K,P) :- K1 is K+1, isP(N,K1,P).

isPrime(N) :- isP(N,2,Q), Q==1.

isPrimeDivisor(X,P) :- isPrime(P), Q is X mod P, Q==0.
</div>

<div class="nb-cell program" name="p12">
%% Разложение на простые множители

divs(N,K,[]) :-  K &gt; N, !.
divs(N,K,[K|T]):- Q is N rem K, Q==0, N1 is N div K, divs(N1,K,T).
divs(N,K,T) :- Q is N rem K, Q \= 0, K1 is K+1, divs(N,K1,T).

setOf([],[]).
setOf([X|T],[X|R]) :- delete(T,X,Q),setOf(Q,R).

allPrimeDivs(N,V) :- divs(N,2,U), setOf(U,V).
</div>

<div class="nb-cell program" name="p13">
%% Удаление дубликатов в строке
dd([X],[X]).
dd([X,X|T],R) :- dd([X|T],R).
dd([X,Y|T],[X|R]) :- X \= Y, dd([Y|T],R).
task(S,R) :- string_chars(S,U), dd(U,Q), string_chars(R,Q).
</div>

<div class="nb-cell program" name="p14">
%% Произведение узлов дерева.
%% замена узлов модулями (при отрицательном произведении)
prod(empty,1).
prod(tree(V,L,R),P) :- prod(L,Pl), prod(R,Pr), P is V*Pl*Pr.

abstree(empty,empty).
abstree(tree(V,L,R),tree(Va,La,Ra)) :- Va is abs(V), abstree(L,La),abstree(R,Ra).

task(T,T) :- prod(T,P), write("P="),write(P),nl,P&gt;=0,!.
task(T,R) :- abstree(T,R).
</div>

<div class="nb-cell program" name="p15">
%% удаление дубликатов в списке
dd([X],[X]).
dd([X,X|T],R) :- dd([X|T],R).
dd([X,Y|T],[X|R]) :- X \= Y, dd([Y|T],R).
</div>

<div class="nb-cell program" name="p16">
%% Удалить из списка элементы, стоящие непосредственно за элементами, равными X
task([],_,[]).
task([X,_|T],X,R) :- task(T,X,R).
task([H|T],X,[H|R]) :- X \= H, task(T,X,R).
</div>

<div class="nb-cell program" name="p17">
%% Найти все подсписки элементов списка, содержащие элемент X
task([],_,[]).
task([H|T],X,[H|R]) :- member(X,H),task(T,X,R),!.
task([_|T],X,R) :- task(T,X,R).
</div>

<div class="nb-cell program" name="p18">
%% Определить к-во узлов дерева. Если их меньше пяти, добавить в дерево пять узлов
add_in_tree(empty,V,tree(V,empty,empty)).
add_in_tree(tree(X,L,R),V,tree(X,Lv,R)):- V &lt; X, add_in_tree(L,V,Lv),!.
add_in_tree(tree(X,L,R),V,tree(X,L,Rv)):- add_in_tree(R,V,Rv).

tree_count(empty,0).
tree_count(tree(_,L,R),N):- tree_count(L,Nl), tree_count(R,Nr), N is Nl+Nr+1.

list_to_tree([],empty).
list_to_tree([H|T],R) :- list_to_tree(T,R1), add_in_tree(R1,H,R).

add_to_tree([],T,T).
add_to_tree([H|R],T,T1) :- add_to_tree(R,T,T0), add_in_tree(T0,H,T1).

task(T,T) :- tree_count(T,N), N &gt;= 5.
task(T,T1):- tree_count(T,N), N &lt; 5, add_to_tree([11,22,33,44,55],T,T1).
</div>

<div class="nb-cell program" name="p19">
% Список кумулятивных сумм
cumSum([X],[X]) :- !.
cumSum([H|T],[S,S0|R]) :- cumSum(T,[S0|R]), S is S0+H.
</div>

<div class="nb-cell program" name="p20">
% Является ли первый список подмножеством второго
isSubset([],_).
isSubset([H|T],W) :- member(H,W), isSubset(T,W),!;fail.
</div>

<div class="nb-cell program" name="p21">
% пересечение множеств
intersection([],_,[]).
intersection([H|T],X,[H|R]) :- member(H,X),intersection(T,X,R),!.
intersection([_|T],X,R) :- intersection(T,X,R).
</div>

<div class="nb-cell program" name="p22">
% Расщепление списка 
split(X,0,[],X):- !.
split([H|T],N,[H|R],U) :- N1 is N-1, split(T,N1,R,U).
</div>

</div>