- •Общие сведения о Прологе, области применения, отличия Пролога от других языков программирования.
- •6. Утверждения программы Турбо-Пролога: факты и правила.
- •7. Раздел goal программы Visual Prolog.
- •8. Этапы программирования на Visual Prolog.
- •9.Декларативный и процедурный смысл программы на Прологе.
- •10.Сопоставление. Правила сопоставимости термов, структур.
- •12.Арифметика Visual Prolog. Арифметические функции.
- •13,14. Рекурсия в Visual Prolog. Пример рекурсивного правила (вычисление факториала, возведение числа в целую степень).
- •14.Рекурсия и эффективность рекурсивных правил на Visual Prolog .
- •15 Стандартные предикаты. Поточный шаблон стандартных предикатов.
- •16.Стандартные предикаты ввода-вывода в Прологе.
- •17.Отсечение в программах на Прологе.
- •18.Отрицание в правилах Visual Prolog.
- •19.Использование составных объектов в Visual Prolog. Простые и составные структуры.
- •20. Списки как основная структура данных в Visual Prolog. Описание списков. Голова и хвост списка .
- •23. Преобразование строки в список символов или атомов.
- •Преобразование строки в символ
- •24.Преобразование данных из одного типа в другой.
- •Преобразование строки в символ
- •25. Преобразование, определяемые пользователем. Пользователь может определить преобразование, не предусмотренные предикатами. Например: целые числа в действительные и наоборот.
- •26. Предикаты Visual Prolog для работы с файлами.
- •27. Описание файловых доменов, переадресация внешних устройств.
- •28. Запись данных в файл на Visual Prolog
- •29. Чтение данных из файла на Visual Prolog
- •30. Дозапись данных в конец существующего файла на Visual Prolog.
- •31.Создание меню средствами Visual Prolog.
- •32.Способы организации цикла в программах на Прологе.
- •33.Создание динамических баз данных средствами Visual Prolog.
- •34. Статические и динамические базы данных в программах на Visual Prolog.
- •35.Способы занесения информации в динамическую базу данных на Visual Prolog.
- •36.Предикаты Турбо-Пролога для работы с базой данных.
20. Списки как основная структура данных в Visual Prolog. Описание списков. Голова и хвост списка .
Список – специальный вид сложного терма, состоящий из последовательности термов, заключенных в [ ] и разделенных запятыми.
domains
list = integer* % целочисленный список.
Списки являются основной структурой данных в программах на Прологе. Для удобства обработки списков введены два понятия: голова (head) и хвост (tail). Так, для списка [1,2,3] элемент 1 является головой списка, а список [2,3], включающий остальные элементы, является хвостом.Для отделения головы спсика от хвоста используется символ “|” [X|Y].
/* Программа увеличения всех элементов списка вдвое */
domains
list=real*
predicates
read_list(integer,list)
new_list(list,list)
result
clauses
/* Ввод списка из N элементов */
read_list(0,[]).
read_list(N,[H|T]):-readreal(H),N1=N-1, read_list(N1,T).
/* Преобразование исходного списка */
new_list([],[]).
new_list([H1|T1],[H2|T2]):-H2=H1*2,new_list(T1,T2).
/* Целевое утверждение */
result:-write(“Enter число элем-ов списка”),nl,
write(“N=”),readint(N),nl,
write(“Вводите элементы списка”)nl,
read_list(N,L),
new_list(L,L1),
write(“Исходный список L=”),
write (L),nl,nl,
write(“Новый список L1=”),
write (L1),nl. goal result.
21. Правило ввода списка (три варианта), вывод списка в Visual Prolog.
ПИШИТЕ (ТОЛЬКО) ТРИ ЛЮБЫХ!
а) ввод_списка1(Кол_эл, Сп) (integer, integer*) : (i,o) – ввод списка Сп, содержащего Кол_эл элементов.
ввод_списка1(0, []).
ввод_списка1(N, [H|T]):-readint(H), N1=N-1, ввод_списка1(N1,T).
б) ввод_списка2(Сп) (integer*) : (o) – ввод списка Сп, содержащего произвольное количество элементов.
ввод_списка2([H|T]):-readint(H), ввод_списка2(T).
ввод_списка2([]).
в) объедин_списков(Сп1, Сп2, Сп3) (integer*, integer*, integer*) : (i,i,o) – список Сп3 получен путем добавления элементов списка Сп2 в конец списка Сп1.
объедин_списков([], L, L).
объедин_списков([H|T], L2, [H|T3]):- объедин_списков(T1, L2, T3).
г) принадл(Эл, Сп) (integer, integer*) : (i, i) – проверка принадлежности элемента Эл списку Сп.
принадл(E, [H| _ ]):-E=H.
принадл(E, [H|T]):-E<>H, принадл(E, T).
д) колич_эл(Сп, Кол_эл) (integer*, integer) : (i, o) – подсчет количества элементов Кол_эл в списке Сп.
колич_эл([], 0).
колич_эл([ _ |T], N):- колич_эл(T, N1), N=N1+1.
л) доб_эл_в_конец (Эл, Сп, Сп1) (integer, integer*, integer*) : (i, i, o) – список Сп1 получен путем добавления элемента Эл в конец списка Сп.
доб_эл_в_конец(E, [], [E]).
доб_эл_в_конец(E, [H|T], [H|T1]):- доб_эл_в_конец(E, T, T1).
к) доб_эл_в_начало(Эл, Сп, Сп1) (integer, integer*, integer*) : (i, i, o) – список Сп1 получен путем добавления элемента Эл в начало списка Сп.
доб_эл_в_начало(E, [H|T], [E,H|T]).
22.Стандартные предикаты для работы со строками.
Определение длины строки
Str_len (строка, длина) (string, string) : (i, o) (i, i)
(i, o) – с параметром длина связывается количество символов в строке
(i, i) – выполняетсмя успешно, если строка имеет указанную длину.
Конкатенация строк
concat (Стр1, Стр2, Стр3) (string, string, string) : (i, i, o) (o, i, i) (i, o, i) (i, i, i)
Создание подстрок
frontstr (КопСтр, ВхСтр, ВыхСтр, Остаток) (integer, string, string, string) : (i, i, o, o)
Разделение строки на две части
frontchar (строка, ПервСимвол, Остаток) (string, char, string) (i, o, o) (i, i, o) (i, o, i) (i, i, i)(o, i, i)
Используется для преобразования строки в список символов
convert (“ “, [ ]).
convert (Str, [H|T]):- frontchar (Str, H, Ost), convert (Ost, T).
Прверка на строку
isname (строка) (string) : (i)
Имена испоьзуются для обозначения символических констант, предикатов и переменных.
Формирование атомов из строк
fronttoken (Строка, Атом, Остаток) (string, string, string) : (i, o, o) (i, i, o) (i, o, i) (i, i, i) (o, i, i)
Атом – последовательность символов, имеющих смысл. Атомы могут быть : именем ТП, строчным представлением числа, отдельным символом (кроме пробела).
(i, i, o) fronttoken (“Go to cursor”, X, Y) X=”Go” Y=”to cursor”