Системные расширения
Протоколирование вывода на экран
Нажав Alt-P и выбрав опцию LOG File, вы можете сохранить все выводя-
щиеся на экран (трассировку, диагностики и т.д.) в файле с именем
PROLOG.LOG.
Переполнение целых чисел
Когда режим <OverflowCheckonIntegers> в <Options/Compiler
Directives> установлен <On>, Турбо Пролог генерирует код для контроля
ошибок переполнения целых чисел.
Контроль переполнения пользовательского стека
В <Options> меню вы можете установить Off (выключить) генерацию кода
для контроля стека для каждого предиката (что уменьшает размер кода).
Управление распределением памяти для резидентных программ
Используя Options/Compiler Directives/Memory Allocation меню (или
используя директиву компилятора heap = dddd в программе), вы можете уве-
личить размер памяти, который будет выделяться вашей EXE-программе опера-
ционной системой.
Указав значение по умолчанию (0), приложение резервирует всю доступ-
ную память.
Это средство, в основном, используется при создании резидентных
программ, что является высоким уровнем программирования на Турбо Прологе.
Отчет об ошибках времени выполнения
Турбо Пролог 2.0 делает доступным отчет о месте, где произошла ошиб-
ка в .EXE файлах. Различные уровни ошибок, которые могут включаться в от-
чет, устанавливаются с помощью директивы компилятора errorlevel (то же
самое можно сделать с помощью Options/Compiler Directives/Errorlevel ме-
ню).
Автоматическое обновление окон
В версии 1.x Турбо Пролога, когда окна убираются с экрана, вам необ-
ходимо было восстанавливать содержимое других окон, поскольку они были
испорчены. Сейчас это всегда автоматически выполняется системой.
Загрузка файлов, используя командную строку DOS
Турбо Пролог всегда загружает файл в редактор, если вы укажете его
имя как аргумент (-e Имя Файла) в командной строке DOS, когда вы загружа-
ете Турбо Пролог. Например, следующая командная строка загружает Турбо
Пролог и помещает файл MYPROG.PRO в редактор:
prolog -emyprog.pro
Таким же способом Турбо Пролог загружает SYS файл (файл установок,
например: C:\TPROLOG\PROLOG.SYS), если вы укажете аргумент (-s Файл Уста-
новок) в командной строке DOS. Например, следующая строка загружает файл
установок: PROLOG.SYS из каталога C:\MYPROJ:
prolog-sc:\myproj\prolog.sys
Подразумеваемый по умолчанию исходный текстовый файл
Если файл с именем WORK.PRO существует в каталоге, откуда вы запус-
каете Турбо Пролог, то система автоматически загружает этот файл в редак-
тор.
Переменные среды DOC
Если не обнаруживается .SYS файлов в текущем каталоге, Турбо Пролог
выбирает значение у переменных сред DOS с именем PROSYS, который указыва-
ет, где можно найти файл установок. Для создания такой переменной среды
введите следующую SET команду DOS:
set prosys = c:\prolog\prolog.sys
Турбо Пролог также выбирает символ контроля "снега" на экране
CGASNOWCHECK, который указывает необходимость контроля "снега" - On (=T)
или отсутствие необходимости контроля "снега" - Off (=F).
Для включения контроля "снега" введите:
set cgasnowcheck = t
Для выключения контроля "снега" введите:
set cgasnowcheck = f
Текстовый режим высокого разрешения
Турбо Пролог работает с видео-картами, поддерживающими 43 или 50
строк на 90, 120 или 132 колонки. Вы можете установить данный режим в ок-
ружении разработки (используя <Setup/ Miscellanious/Screen Mode> меню)
или выбрать в программе с помощью textmode предиката.
Генерация улучшенного кода
Программы, откомпилированные Турбо Прологом 2.0, будут от 10 % до
25% меньше, в среднем, чем программы, откомпилированные версией 1.x.
Версия 2.0 генерирует наименьшие программы, т.к. библиотека была пе-
ределана. Выбрав соответствующие директивы компилятора и определив ваши
личные факты для fileerror и criticalerror, можно получить уменьшение
.EXE файла около 12 К.
Улучшения в редакторе
Редактор улучшен несколькими новыми возможностями, такими как "восс-
тановление после удаления" и "изменение по обстоятельствам" для слов и
выбранных блоков. Дополнительно редактор имеет текстовый режим, когда
строка автоматически продолжается на следующей, если она выходит за пре-
делы окна редактора.
Поддержка начального экрана
.EXE-файлы Турбо Пролога 2.0 не создают автоматические окна, когда
программа стартует. Иначе говоря, экран остается в начальном состоянии и
курсор не изменяется. Это позволяет вам писать приложения, управляемые
как командами DOS.
Изменения в языке
Знак процента как комментарий на строке
Все символы на строке после знака процента интерпретируются как ком-
ментарий (за исключением знака процента внутри строковой константы):
% Это строка комментария.
fail. % Это символы комментария.
write ("Это % не является комментарием").
Предикаты с множественными операндами
Сейчас возможно объявить и использовать предикаты с одними или более
числом операндов. Некоторые стандартные предикаты могут быть расширены
более чем одним операндом.
Снижение контроля типов
Контроль типов изменен так, что переменная из пользовательского до-
мена, объявленного эквивалентным стандартному домену, совместима с аргу-
ментом, объявленным как стандартный домен. Однако, два различных пользо-
вательских домена, объявленных как один и тот же стандартный домен, не
являются совместимыми.
Совместимость символов и целых чисел
Переменные из char (символы) домена сейчас совместимы с переменными
из integer (целые числа) домена. Это значит, что вы можете использовать
символьные значения при вычислениях, и вы можете выводить ASCII значения
целочисленных переменных прямо на экран.
Несколько секций (разделов) внутренних баз данных
Сейчас есть возможность иметь несколько database секций и иметь ло-
кальные базы данных в подмодулях проекта.
Так, например, database секция может быть заполнена на диске с по-
мощью версии с 2-мя аргументами предиката SAVE, или прочитать обратно в
память с помощью версии с 2-мя аргументами предиката CONSULT. Все факты в
database секции могут быть удалены одновременно с помощью 2-х аргументной
версии предиката RETRACTALL.
Вызов других языков из Турбо Пролога
Сейчас возможно вызывать другие языки из Турбо Пролога. Если гло-
бальный предикат объявлен реализованным на другом языке, то система гене-
рирует вызывающую программу для данного языка. Это общий интерфейс. В
принципе, есть возможность работать со всеми компиляторами, которые соз-
дают .OBJ-файлы, однако, это не зависит от обстоятельств. Можно лишь га-
рантировать, что точно работает интерфейс с версией 1.5 Турбо Си (смотри
Главу 3).
Секция определения констант
Вы можете объявить константы, которые желаете использовать в своей
программе в новой секции CONSTANTS. Константы могут использоваться для
назначения имен целочисленным значениям (например, pi, атрибут для крас-
ного цвета, различные значения для заполнения образцов, номера окон и
т.д.). Определения констант работают как макро; вы можете использовать их
для подстановки в доменах и предикатах.
Условная компиляция
Сейчас добавлены новые средства для условной компиляции (ifdef,
ifndef, elsedef, enddef). Вы можете прокомментировать (по условиям) часть
вашей программы. Это может служить поддержкой той же программы для раз-
личных языков или если вам необходимо иметь версию программы для графи-
ческого режима и другую версию для текстового режима. Условная компиляция
обсуждается в Главе 2.
Стандартный ввод/вывод
Домен file дополнен тремя новыми альтернативами stdin, stdout и
stderr. Они являются предопределенными для системы DOS. Преимущество этих
средств передачи потоком в файл в том, что их можно перенаправлять в DOS,
т.к. программы Турбо Пролога сейчас поддерживают переназначение (piping).
Специальные имена библиотек
Сейчас возможно объявить, что глобальные предикаты имеют специальные
имена в .OBJ-файле, отличные от автоматического именования (имя_0, имя_1,
...).
Установка уровня ошибки в DOS
Если вы используете exit, предикат для завершения работы программы,
то можно установить DOS ERRORLEVEL в exit предикате. Если exit предикат
используется без аргументов, то устанавливается значение 0. Это использу-
ется в приложениях, которые выполняются в командных (batch) файлах.
Улавливание ошибок и обработка исключительных состояний
Турбо Пролог 2.0 полностью обеспечивает улавливание ошибок и обра-
ботку исключительных состояний внутри trap предиката. Trap предикат может
улавливать все ошибки времени выполнения, включая переполнение памяти,
поскольку heap, trail и Stack перед установкой обрабатываются пользовате-
лем. Trap также работает с exit.
Полное управление прерыванием
Breack может быть установлен в On или Off посредством breack преди-
ката. Если он установлен Off, то можете опросить посредством
breackpressed предиката; если Breack был нажат, обрамляющий trap то пре-
дикат может захватить его.
Новые стандартные предикаты
bios/4
bios предикат был расширен до 4-х аргументов, чтобы был доступен
возвращаемый флаг после прерывания.
colorsetup
С помощью colorsetup предиката пользователь вашей программы может
интерактивно изменять цвета окна в вашем приложении, используя ту же тех-
нику, что и в Турбо Прологе (Setup/Colors меню).
cursorform/2
cursorform предикат сейчас имеет выходную (output flow) версию, что
позволяет вашей программе прочитать текущий формат курсора.
edit/13
Edit предикат расширен в новой версии, поддерживая расширенные воз-
можности, такие как выборка текстового режима, ввод с отступами
(indentatipn), возврат позиции в тексте и т.д. Старый предикат editmsg
сохранен для совместимости со старыми версиями.
envsymbol
Вы можете прочитать переменные среды DOS, используя envsymbol преди-
кат, для поиска указанной переменной среды в таблице среды DOS для прик-
ладной программы.
errormsd
Этот предикат имеет доступ к файлу, который структуирован также, как
и PROLOG.ERR. Практическое использование этого предиката - для выборки
объяснения для кода ошибки.
existwindow
Новый предикат existwindow проверяет наличие указанного окна на эк-
ране.
format
Этот предикат обеспечивает форматирование числовых значений в строку
таким же способом, как и writef.
framewindow/4
Данный предикат расширен для указания символов рисования и аттрибута
(цвета) обрамления.
makewindow/11
Данный предикат имеет в новой версии 3 входных (input) аргумента:
- указатель необходимости очистки экрана при создании окна;
- позиции, где метка (название) окна должно быть помещено;
- символы для форматирования обрамления окна.
Создание окна без стирания содержимого экрана позволяет считать со-
держимое части экрана, что обычно используется резидентными программами.
random/2
В версии 2.0 имеется версия random предиката с 2-мя аргументами, он
поставляет случайные целые числа из указанного диапазона. Это более быст-
ро, чем генерация вещественных случайных чисел.
removewindow/2
Removewindow предикат поддерживает другую версию, чем изъятие окна
без восстановления того, что было под ним.
resizewindow
Ваша программа может предоставить технологию интерактивного измене-
ния размеров окна, что является альтернативой тому, когда ваша программа
указывает другие размеры текущего окна.
retractall
Новый предикат retractall удаляет все факты из базы данных. Это за-
меняет retract... fail комбинацию. Retractall также существует в версии 2
аргументов, где второй явно указывает имя базы данных.
snowcheck
Данный предикат читает или устанавливает статус контроля "снега" для
CGA вывода.
system/3
Вы можете установить видеосистему для текстового режима, который
Турбо Пролог не поддерживает.
trunC
Это новая арифметическая функция, преобразующая вещественные числа в
целые путем округления.
unreadchar
Этот предикат позволяет вам сместиться на один символ назад в буфере
клавиатуры.
upper_lower
Этот предикат расширен новой версией преобразования между строчными
и прописными буквами.
writef/*
Этот предикат сделан типо-независимым, что позволяет вам выводить
целые без знака, шестнадцатиричные или символы среди других.
Расширение управления ошибками в .EXE файлах
criticalerror
Внутренний предикат criticalerror заменяет обработчик критических
ошибок DOS с теми же ограничениями: только функции DOS, 01-0CH и 59h до-
пустимы.
Если приложение использует другие вызовы функции DOS, DOS получает
непредсказуемое состояние (крах!)
Вы можете заменить установки по умолчанию для этих предикатов. Эти
предикаты никогда не завершаются неудачей (fail) и могут работать только
в .EXE-файлах.
fileerror
Если действие с файлом (например, как чтение в редактор) завершается
неудачно, то внутренний предикат fileerror активизируется.
Рекомендуем применять оба fileerror и criticalerror в ваших профес-
сиональных приложениях. Вы сможете сами обрабатывать ошибки и получите
.EXE-файл, т.к. не будут включаться стандартные обработчики ошибок и Тур-
бо Пролог библиотек.
- Справочное руководство по турбо прологу 2.0
- Глава 2. Элементы языка 50
- Глава 3. Интерфейс с другими языками 75
- Часть 2. Стандартные предикаты 91
- Часть 3. Приложения 250
- Введение
- Дистрибутивные диски
- Рекомендуемая литература:
- Часть 1. Руководство программиста по турбо прологу глава 1. Система меню турбо пролога
- Пользователям Турбо Пролога 1.X
- Структура меню Турбо Пролога
- Выбор элементов меню.
- "Горячие" клавиши.
- Системные окна и строки помощи
- Окно редактирования.
- Как войти в окно редактирования
- Компоненты окна редактирования
- Как выйти из окна редактирования.
- Окно трассировки
- Окно сообщений
- Диалоговое окно
- Строка помощи
- Главное меню.
- Окно редактирования.
- Окно вспомогательного редактирования (Xedit).
- Окно просмотра.
- Изменение размера окон.
- Просмотр окон
- Создание нового файла.
- Загрузка существующего файла.
- Команды редактора.
- Сохранение исходного текста в файле.
- Запись исходного текста на диск
- Вспомогательный редактор
- Меню и команды
- Меню файлов (Files)
- Загрузка файлов (Load)
- "Указка" (Pick)
- Новый (New)
- Выход (Quit)
- Команда редактирования (Edit)
- Команда запуска (Run)
- Меню компиляции (Compile)
- Память (Memory)
- Меню опций (Options)
- Опции компоновки (Link Options)
- Стек (Stack)
- Область ссылок (Trail Array)
- "Куча" (Heap)
- Контроль во время исполнения (Run-time check)
- Цвета (Colors)
- Размер окна (Window size)
- Каталоги
- Текущий каталог (Current directory)
- Авто-загрузка сообщений (Avto-Load Message)
- Режим экрана (Screen mode)
- Конфигурация клавиатуры (Keyboard Configuration)
- Перемещение курсора (Cursor movement)
- Глава 2. Элементы языка
- Ключевые слова.
- Специальные предикаты.
- Разделы программы.
- Раздел доменов (domains).
- Стандартные домены.
- Списковые домены.
- Домены составных объектов.
- Файловый домен.
- Специально заданные предопределенные домены.
- Сокращение объявлений доменов.
- Объявление ссылочных доменов.
- Раздел предикатов (predicates).
- Раздел базы данных (database).
- Раздел предложений (clauses).
- Простые константы.
- Переменные.
- Составные объекты.
- Списки - Специальный вид составных объектов.
- Раздел констант.
- Условная компиляция.
- Включение файлов в вашу программу.
- Директивы компилятора.
- Управление памятью в Турбо Прологе.
- Экономия ресурсов памяти.
- Управление распределением памяти.
- Генерирование выполняемых программ.
- Модульное программирование.
- Проекты.
- Глобальные объявления.
- Глобальные домены.
- Глобальная база данных.
- Глобальные предикаты.
- Компиляция и компоновка модулей.
- Пример.
- Глава 3. Интерфейс с другими языками
- Вызов других языков из Турбо Пролога.
- Что делать перед вызовом.
- Объявление внешних предикатов.
- Вызов соглашений и передача параметров.
- Соглашение об обозначениях
- Использование ключевого слова as
- Вызов процедуры, написанной на Си из Пролога.
- Опции компилятора Турбо Си и компоновка.
- Вызов программ на языке ассемблера из Турбо Пролога.
- Использование внутреннего ассемблера Турбо Си.
- Вызов Турбо Пролога из других языков.
- Динамическое распределение памяти.
- Передача составных объектов в другие языки.
- Передача списков.
- Передача структур.
- Примеры.
- Обработка списков.
- Программирование на низком уровне.
- Часть 2. Стандартные предикаты
- Arc/5 Графика
- Bar/4 Графика
- Bt_close/2 Внешняя База Данных
- Bt_create/5 Внешняя База Данных
- Bt_delete/2 Внешняя База Данных
- Bt_open/3 Внешняя База Данных
- Bt_statistics/8 Внешняя База Данных
- Chain_delete/2 Внешняя База Данных
- Chain_first/3 Внешняя База Данных
- Chain_inserta/5 Внешняя База Данных
- Chain_insertafter/5 Внешняя База Данных
- Chain_insertz/5 Внешняя База Данных
- Chain_last/3 Внешняя База Данных
- Chain_next/3 Внешняя База Данных
- Chain_prev/3 Внешняя База Данных
- Chain_terms/5 Внешняя База Данных
- Circle/3 Графика
- Cleardevice/0 Графика
- Clearviewport/0 Графика
- Closegraph/0 Графика
- Db_btrees/2 Внешняя База Данных
- Db_chains/2 Внешняя База Данных
- Db_close/1 Внешняя База Данных
- Db_create/3 Внешняя База Данных
- Db_delete/2 Внешняя База Данных
- Db_flush/1 Внешняя База Данных
- Db_garbagecollect/1 Внешняя База Данных
- Db_open/3 Внешняя База Данных
- Db_openinvalid/3 Внешняя База Данных
- Db_statistics/5 Внешняя База Данных
- Detectgraph/2 Графика
- Drawpoly/1 Графика
- Ellipse/6 Графика
- Fillellipse/4 Графика
- Fillpoly/1 Графика
- Floodfill/3 Графика
- Getarccoords/6 Графика
- Getaspectratio/2 Графика
- Getbkcolor/1 Графика
- Getcolor/1 Графика
- Getdefaultpalette/1 Графика
- Getdrivername/1 Графика
- Getfillpattern/1 Графика
- Getfillsettings/2 Графика
- Getgraphmode/1 Графика
- Getimage/6 Графика
- Getlinesettings/3 Графика
- Getmaxcolor/1 Графика
- Getmaxx/1 Графика
- Getmaxy/1 Графика
- Getmaxmode/1 Графика
- Getmodename/2 Графика
- Getmoderange/3 Графика
- Getpalette/1 Графика
- Getpalettesize/1 Графика
- Getpixel/3 Графика
- Gettextsettings/5 Графика
- Getviewsettings/5 Графика
- Getx/1 Графика
- Gety/1 Графика
- Graphdefaults/0 Графика
- Graphresult/1 Графика
- Imagesize/5 Графика
- Initgraph/5 Графика
- Key_current/4 Внешняя База Данных
- Key_delete/4 Внешняя База Данных
- Key_first/3 Внешняя База Данных
- Key_insert/4 Внешняя База Данных
- Key_last/3 Внешняя База Данных
- Key_next/3 Внешняя База Данных
- Key_prev/3 Внешняя База Данных
- Key_search/4 Внешняя База Данных
- Line/4 Графика
- Linerel/2 Графика
- Lineto/2 Графика
- Moverel/2 Графика
- Moveto/2 Графика
- Outtext/1 Графика
- Outtextxy/3 Графика
- Pieslice/5 Графика
- Pieslicexy/6 Графика
- Putimage/4 Графика
- Putpixel/3 Графика
- Rectangle/4 Графика
- Restorecrtmode/0 Графика
- Setactivepage/1 Графика
- Setallpalette/1 Графика
- Setaspectratio/2 Графика
- Setbkcolor/1 Графика
- Setcolor/1 Графика
- Setfillpattern/2 Графика
- Setfillstyle/2 Графика
- Setgraphmode/1 Графика
- Setgraphbufsize/1 Графика
- Setlinestyle/3 Графика
- Setpalette/2 Графика
- Setrgbcolor/4 Графика
- Settextjustify/2 Графика
- Settextstyle/3 Графика
- Setusercharsize/4 Графика
- Setviewport/5 Графика
- Setvisualpage/1 Графика
- Setwritemode/1 Графика
- Term_delete/3 Внешняя База Данных
- Term_replace/4 Внешняя База Данных
- Textheight/2 Графика
- Textwidth/2 Графика
- Часть 3. Приложения приложение а. Введение вdos
- Что такое dos
- Как загрузить программу?
- Каталоги
- Подкаталоги
- Avtoexec.Bat-файл
- Команда path
- Смена каталогов
- Приложениеb. Интерактивный редактор турбо пролога
- Быстрый вход, быстрый выход
- Служебная строка окна редактора
- Основные команды редактора
- Команды Редактора, совпадающие с командами WordStar Основные команды работы с курсором
- Команды быстрого движения курсора
- Команды вставки и удаления
- Команды работы с блоками
- Остальные команды редактора
- Старые команды
- Поиск и замена
- Редактор Турбо Пролога по сравнению с WordStar
- Корректировка файла на диске.
- Приложение c. Сообщения об ошибках
- Приложение d. Различия между версиями 1.1 и 2.0
- Файл определения проекта
- Новые ограничения по именам
- Новые предопределенные домены
- Контроль состава параметров шаблона (flow pattern)
- Поддержка старых командных клавиш редактора
- Ошибочные ситуации в стандартных предикатах
- Расширение Турбо Пролога 2.0
- Системные расширения
- Приложениеe. Словарь специальных терминов
- Приложение f. Географическая база данных (Geobase)
- Использование Geobase
- Системы с 2-мя флоппи-дисковыми устройствами
- Компиляция Geobase
- Создание автономной программы
- Главное меню Geobase
- Справка
- Команды dos
- Редактор
- Запросы к базе данных
- Просмотр языка
- Корректировка языка
- Принципы Geobase
- Использование принципа Geobase
- Создание вашей базы данных
- Преобразование Geobase
- Предикат "ent"
- Предикат "db"
- Трансляция запросов на естественном языке
- Внутренние имена объектов
- Внутренние имена связей
- Определение структуры предложений
- База данных языка
- Грамматический разбор с помощью разделения списков
- Заключение
- Приложение g. Анализатор предложений на турбо прологе
- Использование анализатора предложений
- Помощь пользователя
- Операционная система
- Редактирование базы данных
- Загрузка базы данных из файла
- Сохранение базы данных
- Анализ предложений
- «Показать/изменить словарь»
- Приложениеh.Geni: оболочка экспертной системы
- Использование geni
- Запросы geni
- Просмотр знаний
- Корректировка базы знаний
- Сохранение базы знаний
- Создание новой базы знаний
- Чистка текущей базы знаний
- Проектирование новой базы знаний
- Приложение I. Tlib: библиотека турбо
- Компоненты командной строки tlib
- Компонент «описание»
- Список операций
- Имена файла и модуля
- Операции tlib
- Создание библиотеки
- Использование файла ответа
- Расширенные возможности: опция /с
- Примеры
- Приложение j. Tlink: компоновщик турбо
- Активизация tlink
- Использование ответных файлов
- Компоновка модулей Турбо Пролога и Турбо Си.
- Модуль инициализации
- Библиотеки
- Опции tlink
- Опция /c
- Опция /d
- Опция /I
- Опция /l
- Опции /m, /s, /X
- Опция /m
- Опция /s
- Опция /X
- Опция /n
- Ограничения
- Сообщения об ошибках
- Предупреждения
- Нефатальные ошибки
- Фатальные ошибки
- Приложение k. Метапрограммирование Введение
- Пролог/Турбо: развитие и философские установки
- Конструкторские решения в Турбо Прологе
- Чем Турбо зарядило Турбо Пролог
- Интерпретатор правил с обратной цепочкой рассуждений
- Термы (горючее для интерпретатора правил)
- Статические термы: область sTerm (статических термов)
- Интерпретирование области термов.
- Что такое интерпретатор?
- Интерпретация правил в Прологе
- Использование sTerm и aTerm для моделирования интерпретатора правил
- Переменные и среда
- Процесс унификации
- Унификация статических и действительных термов
- Интерпретация тела правила
- Выполнение выполняемых термов: предикат call.
- Встроенные предикаты
- Сканнер и транслятор
- Операторы традиционного Пролога
- Использование операторов в Турбо Прологе
- Интерпретатор Пролога
- Реализация трассировки
- Теперь объединим все вместе
- Расширения экспертной системы
- Цепочка с прямым порядком рассуждений
- Стандартные предикаты, реализованные в pie
- Заключение