Скачиваний:
20
Добавлен:
01.05.2014
Размер:
287.74 Кб
Скачать

Система программирования на Прологе фирмы Сайлоджик Поставщик

Система программирования на Прологе фирмы Сайлоджик (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" программист может определять допол­нительные типы.

Соседние файлы в папке Гл.6,7,Прилож.,Допол