Logo GenDocs.ru

Поиск по сайту:  

Загрузка...

Лабораторная работа на языке Пролог (Prolog). Списки - файл 1.doc


Лабораторная работа на языке Пролог (Prolog). Списки
скачать (44 kb.)

Доступные файлы (1):

1.doc44kb.18.12.2011 19:03скачать

содержание
Загрузка...

1.doc

Реклама MarketGid:
Загрузка...
Министерство образования и науки Российской Федерации

Федеральное агентство по образованию

Лабораторная работа № 1

по функциональному и логическому программированию
«Списки на языке Пролог»
2010 г.

Цель


Ознакомиться с реализацией рекурсивных структур данных (на примере списков) в системе Пролог. Реализовать основные функции работы со списками (вставка, удаление, вывод):

  • Вывод списка на экран

  • Удаление элементов по номеру

  • Удаление элементов по значению

  • Добавление элемента в конец

  • Вставка по номеру

Вызов функций осуществить с помощью системы текстового меню.
^

Описание работы предикатов

deln (list, list, integer) – удаление элемента по номеру


Если входной список пуст – останавливаем поиск. Если текущий элемент – искомый, пропускаем его, а хвост – переписываем в выходной список. Если элемент ещё не найден, переписываем текущий в выходной список и переходим к следующему.

deln ([], [], P) :- !.

deln ([I1 | It], It, 1) :- !.

deln ([I1 | It], [I1 | Ot], P) :-

PN = P-1,

deln(It, Ot, PN).
^

insert (list, list, integer, integer) – вставка элемента по номеру


С если входной список пуст – останавливаем поиск. Если уже продвинулись до нужной позиции – пишем на выход в голову новый элемент, а в хвост – всё что осталось на входе. Если позиция ещё не найдена – переписываем один элемент со входа на выход и продвигаемся к следующему.

insert ([], [], P, V) :- !.

insert (I, [V | Ot], 1, V) :-

insert (I, Ot, -1, V).

insert ([I1 | It], [I1 | Ot], P, V) :-

PN = P-1,

insert(It, Ot, PN, V).
^

delval (list, integer, list) – удаление элементов по значению


Если список пуст – прекращаем работу. Если текущий элемент по значению равен искомому, он пропускается и идёт работа над хвостом. Если текущий не равен искомому, он переписывается на выход и идёт работа над хвостами.

delval ([], V, []) :- !.

delval ([I1 | It], I1, O) :-

delval(It, I1, O).

delval ([I1 | It], V, [I1 | Ot]) :-

delval(It, V, Ot).
^

append (list, list, list) – добавление элемента в конец списка


Если список пуст, выходной список равен добавляемому. Если нет – переписывается очередной элемент и идёт работа с хвостами.

append ([], L, L).

append ([X|L1], L2, [X|L3]) :-

append(L1, L2, L3).
^

Листинг программы


DOMAINS

list = integer*

rimlist = string*
PREDICATES

delval (list, integer, list)

main (list)

choise (list)

menu ()

switch (char, list)

append (list, list, list)

deln (list, list, integer)

insert (list, list, integer, integer)

printn (list, integer)


CLAUSES

deln ([], [], P) :- !.

deln ([I1 | It], It, 1) :- !.

deln ([I1 | It], [I1 | Ot], P) :-

PN = P-1,

deln(It, Ot, PN).

delval ([], V, []) :- !.

delval ([I1 | It], I1, O) :-

delval(It, I1, O).

delval ([I1 | It], V, [I1 | Ot]) :-

delval(It, V, Ot).

append ([], L, L).

append ([X|L1], L2, [X|L3]) :-

append(L1, L2, L3).
insert ([], [], P, V) :- !.

insert (I, [V | Ot], 1, V) :-

insert (I, Ot, -1, V).

insert ([I1 | It], [I1 | Ot], P, V) :-

PN = P-1,

insert(It, Ot, PN, V).
main (LIST) :-

menu(),

choise(LIST),

fail.
menu () :-

clearwindow(),

write("\n Main menu:\n"),

write("\n1 - Print list"),

write("\n2 - Append node"),

write("\n3 - Delete node by value"),

write("\n4 - Delete node by number"),

write("\n5 - Insert node"),

write("\nx - Exit").
choise (LIST) :-

write("\n\nChoose menu item: "),

readchar(KEY),

switch(KEY, LIST),

fail.
switch ('1', LIST) :-

clearwindow(),

write("\n List content:\n\n"),

write(LIST),

write("\n\n\n\nPress any key..."),

readchar(_),

main(LIST).
switch ('2', LIST) :-

clearwindow(),

write("\n Value to append: "),

readint(A),

append(LIST, [A], T),

write("\n List content:\n\n"),

write(T),

write("\n\n\n\nPres any key..."),

readchar(_),

main(T).
switch ('3', LIST) :-

clearwindow(),

write("\n Value to delete: "),

readint(A),

delval(LIST, A, T),

write("\n List content:\n\n"),

write(T),

write("\n\n\n\nPress any key..."),

readchar(_),

main(T).

switch ('4', LIST) :-

clearwindow(),

write("\n Position to delete: "),

readint(P),

deln(LIST, T, P),

write("\n Node deleted.\n List content:\n\n"),

write(T),

write("\n\n\n\nPress any key..."),

readchar(_),

main(T).
switch ('5', LIST) :-

clearwindow(),

write("\n Position: "),

readint(P),

write("\n Value: "),

readint(V),

insert(LIST, T, P, V),

write("\n Node inserted."),

write("\n List content:\n\n"),

write(T),

write("\n\n\n\nPress any key..."),

readchar(_),

main(T).


switch ('x', LIST) :- exit.
switch (KEY, LIST) :- main(LIST).
GOAL

makewindow(4, 63, 118, "Lab work #1 Bulgakova", 2, 3, 21, 55),

main([1,0,2,0,3,0,4,0,5,0,6,0,7,0,8,0]).


Скачать файл (44 kb.)

Поиск по сайту:  

© gendocs.ru
При копировании укажите ссылку.
обратиться к администрации