
- •Приложение 4-5
- •IV. Версии языка пролог СиПролог Поставщик
- •Синтаксис и встроенные предикаты
- •Директивы
- •Среда для разработки программ
- •Отладчик
- •Отладочные команды
- •Компилятор
- •Запомненные состояния
- •Интерфейс с иными языками программирования
- •Расширения языка
- •Квинтус Пролог Поставщик
- •Синтаксис и встроенные предикаты
- •Директивы
- •Среда разработки программ
- •Отладчик
- •Компилятор
- •Запомненные состояния
- •Система программирования на Прологе фирмы Сайлоджик Поставщик
- •Синтаксис и встроенные предикаты
- •Директивы
- •Среда разработки программ
- •Отладчик
- •Компилятор
- •Запомненные состояния
- •Интерфейс с иными языками программирования
- •Расширения
- •Пролог-2 Поставщик
- •Синтаксис и встроенные предикаты
- •Директивы
- •Среда разработки программ
- •Отладчик
- •Компилятор
- •Запомненные состояния
- •Интерфейс с иными языками программирования
- •Расширения
- •Эрити Пролог Поставщик
- •Синтаксис и встроенные предикаты
- •Среда разработки программ
- •Отладчик
- •Компилятор
- •Запомненные состояния
- •Расширения
- •Унсв Пролог Поставщик
- •Синтаксис и встроенные предикаты
- •Директивы
- •Среда разработки программ
- •Отладчик
- •Компилятор
- •Запомненные состояния
- •Интерфейс с иными языками программирования
- •Турбо Пролог Поставщик
- •Синтаксис и встроенные предикаты
- •Среда разработки программ
- •Отладчик
- •Запомненные состояния
- •Интерфейс с иными языками программирования
- •Расширения
- •V. Ответы к упражнениям Ответы к упражнениям
- •Глава 2
- •Глава 3
- •Глава 5
- •Глава 6
- •Глава 7
Система программирования на Прологе фирмы Сайлоджик Поставщик
Система программирования на Прологе фирмы Сайлоджик (Silogic Knowledge Workbench, сокращенно — SKW) поставляется фирмой Сайлоджик, Инк. Система SKW функционирует на многих компьютерах, работающих под управлением операционной системы UNIX. Система SKW основана на СиПрологе, но обладает по сравнению с ним многими дополнительными возможностями и расширениями.
Синтаксис и встроенные предикаты
Синтаксис SKW совместим с синтаксисом DEC-10 Пролога. Все программы, приведенные в данной книге, будут работать в SKW, при этом не потребуется вносить в них какие-либо исправления. В SKW имеется большинство встроенных предикатов DEC-10 Пролога, а также большое количество новых предикатов. Наибольшие добавления в SKW связаны с UNIX-подобным управлением файлами и с системными вызовами операционной системы UNIX.
При работе с открытыми файлами в нижеследующих предикатах употребляются идентификаторы потоков.
fopen(F, M, S) F - имя файла, М - один из трех атомов, задающих режим работы с файлом: r (read - чтение), w (write — запись) и a (append — запись в конец файла). Этот предикат открывает файл заданным образом и конкретизирует переменную S, присваивая ей уникальный идентификатор потока.
gets (S, L) S — идентификатор потока, связанный с файлом, который был открыт для чтения, L — список символов. Данный предикат конкретизирует L следующей входной строкой из файла, ассоциируемого cS.
puts(S, L) S — идентификатор потока, связанный с файлом, который был открыт для записи в начало файла или в конец файла. L — список символов. Данный предикат помещает символы из списка L в файл, ассоциируемый с S.
fclose(S) этот предикат закрывает файл, ассоциируемый с инденти-фикатором потока S.
Пример :
| ?- fopen("'ap. data", r, SI),
fopen("'ap. report", w, S0),
gets(SI, X),
обработка(Х,Y),
puts (S0, Y),
puts(S0, "конец отчета") ,
fclose (SI),
fclose(S0).
Предикат "name_stream/2" дает имена и индентификаторы потока для всех открытых потоков.
В SKW есть нижеследующие встроенные предикаты, обеспечивающие интерфейс с системными вызовами UNIX:
chdir
chmod
chown
fork
getpid
getenv
kill
nice
и т.д.
В SKW имеются следующие встроенные предикаты: "argc", который дает количество аргументов командной строки при вызове Пролога из операционной системы, и "argv", который вырабатывает список аргументов командной строки. Существует также предикат форматного вывода "writef/2", в котором можно задавать коды формата, сходные с обозначениями формата в операторе "printf" языка Си.
Арифметические "вычислители" ("is", "<" ит.д.) позволяют в дополнение к обычным арифметическим операциям вычислять еще ряд функций:
sqrt(X) % квадратный корень из Х
ехр (X) % число е в степени Х
log (X) % натуральный логарифм Х
log10(X) % десятичный логарифм Х
sin (X)
cos (X)
tan (X)
asin (X)
асos(X)
atan (X)
и т.д.
Типы
Основными типами в SKW являются атомы, целые числа, числа с плавающей точкой и структуры. Как и в СиПрологе, если все аргументы арифметического выражения — целые, то и в результате вычисления этого выражения получится целое число. Если в арифметическом выражении попадаются числа с плавающей точкой, то в результате вычисления этого выражения получится число с плавающей точкой. В результате операции деления / получается число с плавающей точкой, а в результате операции деления // - целое число.
Как и в СиПрологе, альтернативной формой записи списка символов служит строка символов, заключенная в двойные кавычки.
Существует альтернативная форма записи и для значений из ascii—кодовой таблицы. При этом перед символом записываются символы 0 и . Будут эквивалентными такие списки:
[97,98,99] [0'a,0'b,0'c]
Для целей оптимизации, осуществляемой во время компиляции, в SKW имеются нижеследующие объявления типов в директивах "mode" (см. ниже подраздел "Директивы") :
compound Данный аргумент является составным термом.
list(X) Данный аргумент является списком; если Х — имя типа, то данный аргумент является списком термов этого типа.
atomic Данный аргумент является атомом или числом.
atom Данный аргумент является атомом.
number Данный аргумент является целым числом или числом с плавающей точкой.
integer Данный аргумент является целым числом.
При помощи директивы "type" программист может определять дополнительные типы.