- •1)Направления развития искусственного интеллекта
- •7)Экспертная система
- •13)Алгоритм обратного распространения ошибки
- •19) Современные системы распознавания текстов
- •25) Моделирование в поэзии
- •31)История возникновения и развития Пролога
- •37) Основные понятия Пролога – отсечения
- •43) Метод поиска в глубину
- •Быстрая сортировка
- •Сортировка слияниями
- •49) Сортировка списков в Прологе
- •55) Чтение информации из файла в Прологе
- •61) Написать предикат, находящий максимум из двух чисел
- •67) Создать предикат, который будет дублировать символ, введенный пользователем с клавиатуры
- •73) Написать предикат, позволяющий получать элемент списка по его номеру
- •79) Написать предикат, который будет преобразовывать строку в список атомов
- •85)Разработать предикат, который будет копировать часть строки
55) Чтение информации из файла в Прологе
Имеется также предикат file_str, который целиком читает символы файла в строку или, наоборот, записывает содержимое строки в файл, в зависимости от того, свободен ли второй параметр этого предиката. Первым входным параметром этого предиката является символическое имя файла, а вторым — строка, в которую считывается содержимое файла или из которой записывается информация в него.
Для записи данных в текущее устройство записи служит уже знакомый нам предикат write, который до этого мы использовали для вывода информации на монитор. Для чтения информации из активного устройства вывода — также уже знакомые нам предикаты readln (читает строку), readint (читает целое), readreal (читает вещественное число), readchar (читает символ),readterm (читает терм).
Так как это — наш первый опыт работы с файлами в Прологе, приведем всю программу целиком, со всеми разделами. В разделе описания внутренней цели организуем ввод имени файла и вызов основного предиката.
DOMAINS /* раздел описания доменов */
file = f /* f — внутреннее имя файла */
PREDICATES /* раздел описания предикатов */
write_file(file)
writeFile(string)
CLAUSES /* раздел описания предложений */
write_file(f):–
not(eof(f)),!, /* если файл f еще
не закончился */
readchar(C), /* читаем из него символ */
write(C," "), /* выводим символ на экран*/
write_file(f). /* продолжаем процесс */
write_file(_). /* это предложение нужно, чтобы предикат
не потерпел неудачу в случае, когда
будет достигнут конец файла */
writeFile(F_N):–
existfile(F_N),!, /* убеждаемся в существовании
файла с именем F_N */
openread(f,F_N), /* связываем внешний файл F_N
с внутренним файлом f
и открываем его на чтение */
readdevice(f), /* устанавливаем в качестве
устройства чтения файл f */
write_file(f), /* вызываем предикат, выводящий
на экран все символы
файла f */
closefile(f), /* закрываем файл */
readdevice(keyboard), /* перенаправляем ввод
на клавиатуру */
nl,nl, /* пропускаем строку */
write("Нажмите любую клавишу"),
/* выводим сообщение на экран */
readchar(_)./* ждем нажатия любой клавиши */
writeFile(F_N):–
write("Файл с именем ",F_N," не наден!").
/* выдаем сообщение, если предикат
existfile потерпел неудачу */
GOAL /* раздел описания внутренней цели*/
write("Введите имя файла: "),
readln(F_N), /* читаем название файла в переменную F_N */
writeFile(F_N).
61) Написать предикат, находящий максимум из двух чисел
Решение:
max(X,Y,X):-
X>Y. /* если первое число больше второго,
то первое число - максимум */
max(X,Y,Y):-
X<Y. /* если первое число меньше второго,
то второе число - максимум */
max(X,Y,Y):-
X=Y. /* если первое число равно второму,
возьмем в качестве максимума
второе число */
