Пролог лабы / Лаб4
.docxСанкт-Петербургский государственный электротехнический университет «ЛЭТИ»
имени В. И. Ульянова(Ленина)
Открытый факультет
Кафедра Автоматизированных Систем Обработки Информации и Управления
Лабораторная работа №4
по дисциплине: «Проектирование систем искусственного интеллекта»
Выполнил: ст. гр. 0851
Карелина Л.А
Проверил:
Соничев А.В.
Санкт-Петербург
2015
Программирование итераций
Цель работы - ознакомление с синтаксисом определения и методами простейшей обработки списков; построение простейших программ обработки списков.
Задание к лабораторной работе
-
Провести тестирование программы LAB4.PRO.
-
Изменить программу LAB4.PRO так, чтобы она обеспечивала ввод и вывод списка символов в прямом и обратном порядке. Чтение символа с клавиатуры до символа Esc может быть определено, например, предикатом readsim:
readsim(S) :- readchar(S), S. <> 27, write(S," ").
readsim(27) :- fall.
-
Изменить программу LAB4.PRO так, чтобы она обеспечивала ввод и вывод списка слов в прямом и обратном порядке и вычисление числа слов в этом списке.
Порядок выполнения задания
-
Загрузить Турбо-Пролог.
-
Загрузить программу LAB4.PRО и убедиться в правильности ее работы.
-
Внести требуемые изменения.
Содержание отчета
Отчет должен содержать подученные тексты программ и результаты их работы.
Текст программы:
domains
list = integer*
symlist = char*
strlist = string*
predicates
runint
rdlist(list)
tail_list(list)
head_list(list)
runsym
rdsymlist(symlist)
readsym(char)
tail_symlist(symlist)
head_symlist(symlist)
runstr
rdstrlist(strlist)
readword(string)
tail_strlist(strlist)
head_strlist(strlist)
length_strlist(strlist, integer)
goal
runstr.
clauses
runstr :-
write("enter words - "), nl,
rdstrlist(L),nl,
write("direct order - "),nl,
head_strlist(L),nl,
write("inversed order - "),nl,
tail_strlist(L),nl,
write("word count - "), nl,
length_strlist(L,C), write(C).
readword(W) :-
readln(W),
str_len(W, L), L <> 0.
rdstrlist([W|L]) :-
readword(W),
rdstrlist(L).
rdstrlist([]).
length_strlist([],0).
length_strlist([_|T], L) :-
length_strlist(T, C),
L = C + 1.
head_strlist([W|L]) :-
write(W,","),
head_strlist(L).
head_strlist([]).
tail_strlist([W|L]) :-
tail_strlist(L),
write(W,",").
tail_strlist([]).
%----------------------------------------------
runsym :-
write("enter symbols - "), nl,
rdsymlist(L),nl,
write("direct order - "), nl,
head_symlist(L),nl,
write("inversed order - "), nl,
tail_symlist(L).
rdsymlist([S|L]) :-
readsym(S),
rdsymlist(L).
rdsymlist([]).
readsym(S) :- readchar(S), S <> 27, write(S).
readsym(27) :- fail.
head_symlist([S|L]) :-
write(S),
head_symlist(L).
head_symlist([]).
tail_symlist([S|L]) :-
tail_symlist(L),
write(S).
tail_symlist([]).
%---------------------------------------------
runint :- write("enter the list - "),nl,
rdlist(L),
write("direct order -"),nl,
head_list(L),nl,
write("inversed order - "),nl,
tail_list(L).
rdlist([S|L]) :- readint(S),
rdlist(L).
rdlist([]).
tail_list([S|T]) :- tail_list(T),
write(S,",").
tail_list([]).
head_list([H|T]) :- write(H,","),
head_list(T).
head_list([]).
Результат работы