Функциональное и логическое программирование — лабораторные. Часть 2.


domains
intlist=integer*

predicates

cr_list (intlist,intlist) % Создание списка
do % Главная процедура
list (intlist) % Вывод списка — левая рекурсия
length(intlist,integer) % вычисление длины списка (левая рекурсия)
app_el (integer,intlist,intlist) % Добавить элемент в начало списка

clauses

list([]).
list([X|T]):-list(T),write(X,» «).

app_el(X,L,[X|L]).

cr_list(List,NewList):-readint(X),
X<>111,!,
app_el(X,List,TempList),
cr_list(TempList,Newlist).

cr_list(List,List).

length([],0).
length([_|Xs],N):- length(Xs,N1),N=N1+1.

do:-
write(«Введите элементы списка. Признак окончания ввода — 111.»),nl,
cr_list([],Nlist),!,nl,
list(NList),nl,
length(NList,N),
write(«Количество элементов списка => «,N),nl.

goal
do.

domains
stringlist=string*

predicates

cr_list (stringlist,stringlist) % Создание списка
do % Главная процедура
list (stringlist) % Вывод списка — правая рекурсия
app_el (string,stringlist,stringlist) % Добавить элемент в начало списка
sort(stringlist,stringlist)
insert(string, stringlist,stringlist)
clauses

sort([X|Xs],Ys):-sort(Xs,Zs), insert(X,Zs,Ys).
sort ([ ], [ ]).
insert (X,[],[X]).
insert (X, [Y | Ys], [Y | Zs]):- X > Y, insert (X, Ys, Zs).

insert(X,[Y|Ys],[X,Y|Ys]):-X<=Y. list([]). list([X|XS]):-write(X,"\n"),list(Xs). app_el(X,L,[X|L]). cr_list(List,NewList):-readln(X), X<>«0»,!,
app_el(X,List,TempList),
cr_list(TempList,Newlist).

cr_list(List,List).

do:-
write(«Введите элементы списка. Признак окончания ввода — 0.»),nl,
cr_list([],Nlist),!,nl,
sort(Nlist,Nlist1),
write(«отсортированный список слов\n\n»),
list(Nlist1), nl, nl.
goal
do.

domains
inttree = tree(integer,inttree,inttree); end

predicates
nondeterm do(inttree)
action(integer,inttree,inttree)
create_tree(inttree,inttree)
insert(integer,inttree,inttree)
write_tree(inttree)
sumtree(inttree,integer)
nondeterm repeat
clauses
do(Tree):-
repeat,nl,
write(«*******************************************************»),nl,
write(«Введите 1 для изменения дерева\n»),
write(«Введите 2 для вывода дерева\n»),
write(«Введите 3 для вывода суммы\n»),
write(«Введите 999 для выхода из программы\n»),
write(«*******************************************************»),nl,
write(«Enter number — «),
readint(X),nl,
action(X, Tree, NewTree),
do(NewTree).

action(1,Tree,NewTree):-
write(«Введите 999 для окончания ввода\n»),
create_Tree(Tree, NewTree).
action(2,Tree,Tree):-
write_Tree(Tree),
write(«\nPress a key to continue»),
readint(_),nl.
action(3,Tree,Tree):-
sumtree(Tree, Sum),
write(«Сумма вершин дерева равна «, Sum, «\n»),
write(«\nPress a key to continue»).

action(999, _, end):-
exit.

create_Tree(Tree, NewTree):-
readint(C),
C<>999,!,
insert(C, Tree, TempTree),
create_Tree(TempTree, NewTree).
create_Tree(Tree, Tree).

insert(New,end,tree(New,end,end)):-!.
insert(New,tree(Element,Left,Right),tree(Element,NewLeft,Right)):-
New

Загрузка...