domains
%определение типа списка
spisok=integer*
predicates
%склеивание 1го и 2го списков в 3й
skleivanie(spisok,spisok,spisok)
%функция считывания последнего элемента
lastEl(spisok,spisok)
%вывод на экран списка
list (spisok)
%функция получения списка без последнего элемента
withoutL(spisok,spisok)
%функция сдвига на 1 эелемент вправо
sdvig(spisok,spisok)
%главная функция
do(integer,spisok)
clauses
%вывод на экран, отрезается голова, и тд рекурсивно внутрь, потом вывод на экран с последнего элемента
list([]).
list([X|T]):-write(X,» «),list(T).
%склеивание отрезание головы первого списка.. и приклеивание его ко второму в 3м списке
skleivanie([], List, List).
skleivanie([X|L1], List2, [X|L3]) :- skleivanie(L1, List2, L3).
%если остался 1 элемент в списке, то записать его в список возвращения.
lastEl([X],Sp):-skleivanie([X],[],Sp).
%отрезать с головы переданного списка по элементу, пока не останется 1 шт.
lastEl([X|Sp],Sp1):-lastEl(Sp,Sp1).
%если останется 1 элемент в списке исключить его
withoutL([X],[]).
%отрезать с головы переданного списка по элементу, пока не останется 1 шт, потом склеивать их обратно без последнего элемента
withoutL([X|Sp],Sp1):-
withoutL(Sp,Sp2),
skleivanie([X],Sp2,Sp1).
%сдвигаем список на 1 элемент вправо(отрезаем последний элемент и вклеиваем в начало усеченного списка)
sdvig(Sp,Sdvig):-
lastEl(Sp,LastEl),
withoutL(Sp,Hvost),
skleivanie(LastEl,Hvost,Sdvig).
%главная функция
do(X,Sp):-X=0,list(Sp),!.
do(X,Sp):-
Y=X-1,
sdvig(Sp,Sdvig),
do(Y,Sdvig).
goal
do(5,[1,2,3,4,5,6,7,8,9,0]).
predicates
pol (symbol, symbol)
roditel (symbol, symbol)
diadia(symbol, symbol)
tetia(symbol, symbol)
suprug(symbol, symbol)
svekr(symbol, symbol)
svekrov(symbol, symbol)
clauses
suprug(anna,sergey).
suprug(sergey,anna).
suprug(tatiana,dmitriy).
suprug(dmitriy,tatiana).
suprug(liza,petr).
suprug(petr,liza).
suprug(katya,mihail).
suprug(mihail,katya).
suprug(alex,raisa).
suprug(raisa,alex).
suprug(alexandr,juli).
suprug(juli,alexandr).
pol(barbara,j).
pol(anna,j).
pol(sergey,m).
pol(tatiana,j).
pol(dmitriy,m).
pol(valera,m).
pol(liza,j).
pol(katya,j).
pol(petr,m).
pol(mihail,m).
pol(nikolay,m).
pol(alex,m).
pol(alexandr,m).
pol(juli,j).
pol(raisa,j).
pol(liuda,j).
pol(kostiya,m).
roditel(barbara,lisa).
roditel(anna,katya).
roditel(anna,petr).
roditel(sergey,katya).
roditel(sergey,petr).
roditel(tatiana,mihail).
roditel(dmitriy,mihail).
roditel(valera,nikolay).
roditel(liza,alex).
roditel(katya,juli).
roditel(petr,alex).
roditel(petr,alexandr).
roditel(mihail,juli).
roditel(nikolay,raisa).
roditel(alex,kostiya).
roditel(alexandr,liuda).
roditel(juli,liuda).
roditel(alex,kostiya).
roditel(raisa,kostiya).
diadia(D,P):- !,pol(D,m),roditel(DB,P),roditel(R,D),roditel(R,DB),DB>
list(Sp),
!.
%тело самой функции
proc(X1,X2,Sp):-
Y=X2-1,
skleivanie(Sp,[X2],Sp1),
proc(X1,Y,Sp1).
%главная функция
go:-
random(30,X2),
random(X2,X1),
Sp=[],
proc(X1,X2,Sp).
goal
go.
domains
%определение типа списка
spisok=integer*
predicates
%склеивание 1го и 2го списков в 3й
skleivanie(spisok,spisok,spisok)
%функция считывания последнего элемента
lastEl(spisok,spisok)
%вывод на экран списка
list (spisok)
%функция получения списка без последнего элемента
withoutL(spisok,spisok)
%функция сдвига на 1 эелемент вправо
sdvig(spisok,spisok)
%главная функция
do(integer,spisok)
clauses
%вывод на экран, отрезается голова, и тд рекурсивно внутрь, потом вывод на экран с последнего элемента
list([]).
list([X|T]):-write(X,» «),list(T).
%склеивание отрезание головы первого списка.. и приклеивание его ко второму в 3м списке
skleivanie([], List, List).
skleivanie([X|L1], List2, [X|L3]) :- skleivanie(L1, List2, L3).
%если остался 1 элемент в списке, то записать его в список возвращения.
lastEl([X],Sp):-skleivanie([X],[],Sp).
%отрезать с головы переданного списка по элементу, пока не останется 1 шт.
lastEl([X|Sp],Sp1):-lastEl(Sp,Sp1).
%если останется 1 элемент в списке исключить его
withoutL([X],[]).
%отрезать с головы переданного списка по элементу, пока не останется 1 шт, потом склеивать их обратно без последнего элемента
withoutL([X|Sp],Sp1):-
withoutL(Sp,Sp2),
skleivanie([X],Sp2,Sp1).
%сдвигаем список на 1 элемент вправо(отрезаем последний элемент и вклеиваем в начало усеченного списка)
sdvig(Sp,Sdvig):-
lastEl(Sp,LastEl),
withoutL(Sp,Hvost),
skleivanie(LastEl,Hvost,Sdvig).
%главная функция
do(X,Sp):-X=0,list(Sp),!.
do(X,Sp):-
Y=X-1,
sdvig(Sp,Sdvig),
do(Y,Sdvig).
goal
do(12,[1,2,3,4,5,6,7,8,9,0]).
/* create_tree (A, B) помещает A в поле данных одноузлового
дерева B
insert_left (A, B, C) вставляет A как левое поддерево B
и присваивает результат C
insert_right (A, B, C) вставляет A как правое поддерево
B и присваивает результат C */
domains
treetype = tree (string, treetype, treetype); empty ()
predicates
res(treetype,integer)
create_tree (string, treetype)
insert_left (treetype, treetype, treetype)
insert_right (treetype, treetype, treetype)
obhodLVL(treetype,integer,integer)
run
clauses
create_tree (A, tree (A, empty, empty)).
insert_left (X, tree (A, _, B), tree (A, X, B)).
insert_right (X, tree (A, B, _), tree (A, B, X)).
obhodLVL(empty,C,C):-true.
obhodLVL(tree(Item,Left,Right),C,C):-
write(Item,» || «).
obhodLVL(tree (Item,Left,Right),CurL,Count):-
Y=Count+1,
obhodLVL(Left,CurL,Y),
obhodLVL(Right,CurL,Y).
res(Tree,Ind):-obhodLVL(Tree,Ind,1),Y=Ind+1,res(Tree,Y).
run:-
%создание одноузловых деревьев
create_tree («Я», A),
create_tree («пошел», B),
create_tree («остался», C),
create_tree («в школу», D),
create_tree («гулять», E),
create_tree («дома», F),
create_tree («у друга», G),
create_tree («учился», H),
create_tree («засыпал», J),
create_tree («болел», K),
create_tree («развлекался», L),
%соединение деревьев
insert_right(L,G,G2),
insert_left(K,F,F1),
insert_left(F1,C,F2),
insert_right(G2,F2,F3),%правое поддерево F3
insert_left(H,D,D1),
insert_right(J,D1,D2),%»в школу» с поддеревьями D2
insert_right(E,B,B1),
insert_left(D2,B1,B2),%левое поддерево
insert_left(B2,A,A1),
insert_right(F3,A1,A2),
%корень дерева A2
write(«Должно получится:\n»),
write(«Я || пошел || остался || в школу || гулять || дома || у друга || учился || засыпал || болел || развлекался\n»),
write(«Получилось:\n»),
res(A2,1).
%obhodLVL(A2,Z,1).
goal
run.