Скачиваний:
76
Добавлен:
17.06.2016
Размер:
36.47 Кб
Скачать

Санкт-Петербургский государственный электротехнический университет «ЛЭТИ»

имени В. И. Ульянова(Ленина)

Открытый факультет

Кафедра Автоматизированных Систем Обработки Информации и Управления

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

по дисциплине: «Проектирование систем искусственного интеллекта»

Выполнил: ст. гр. 0851

Карелина Л.А

Проверил:

Соничев А.В.

Санкт-Петербург

2015

Программирование итераций

Цель работы - ознакомление с синтаксисом определения и методами простейшей обработки списков; построение простейших программ обработки списков.

Задание к лабораторной работе

  1. Провести тестирование программы LAB4.PRO.

  2. Изменить программу LAB4.PRO так, чтобы она обеспечивала ввод и вывод списка символов в прямом и обратном порядке. Чтение символа с клавиатуры до символа Esc может быть определено, например, предикатом readsim:

readsim(S) :- readchar(S), S. <> 27, write(S," ").

readsim(27) :- fall.

  1. Изменить программу LAB4.PRO так, чтобы она обеспечивала ввод и вывод списка слов в прямом и обратном порядке и вычисление числа слов в этом списке.

Порядок выполнения задания

  1. Загрузить Турбо-Пролог.

  2. Загрузить программу LAB4.PRО и убедиться в правильности ее работы.

  3. Внести требуемые изменения.

Содержание отчета

Отчет должен содержать подученные тексты программ и результаты их работы.

Текст программы:

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([]).

Результат работы

Соседние файлы в папке Пролог лабы