3.5 Общие сведенья об интерпретаторе

Данная версия языка Пролог совместима по синтаксису с языком Turbo Prolog с некоторыми отличиями.

Поддерживаются следующие простые типы данных:

Integer - целочисленный тип;

Real - число с плавающей запятой;

String - строка;

Boolean - логический тип (имеет два значение True - истина и False - ложь).

Составные типы:

Список - используется для представления массивов данных. Количество элементов в списке не ограничено.

Структура - используется для представления массивов неоднородных данных. Количество полей в структуре не ограничено.

Составной тип - используется для совмещения нескольких типов под одним именем.

Комментарии внутри программы записываются внутри фигурных скобок.

3.6 Особенности работы Пролог-программы с базами данных

Данная версия Пролога работает со следующими видами баз данных:

Paradox 7 (или предыдущие версии);

DBase IV и DBase for Windows;

Fox Pro;

MS Access.

Для использования других видов баз данных (например, InterBase или Oracle) необходима установка драйверов этих баз данных.

Работа с базами данных производится под управлением Borland Database Engine, которая должны быть установлена на компьютер либо при установке Пролога, либо с какой-либо другой программой.

При выполнении программы база данных идентифицируется с помощью своего псевдонима, которое при вводе структуры базы данных средствами инспектора заносится в поле "Имя". Имя файла базы данных в тексте программы не используется, хотя псевдоним и имя файла могут совпадать.

Обращение к базе данных происходит так же, как к обычным предикатам, состоящим только из предложений-фактов.

При запуске Пролог-программы интерпретатор определяет, существует ли файл базы данных на диске. Если файл базы данных существует, то он открывается и проверяется соответствие структуры файла базы данных и описания этой базы данных в программе. При описании базы данных в программе некоторые поля можно не использовать. Если файл базы данных отсутствует на диске, то он создается по описанию структуры. При завершении выполнения Пролог-программы все базы данных автоматически закрываются.

3.7 Описание стандартных предикатов

Все стандартные предикаты выполняются только прямом пути алгоритма бэктрекинга. На обратном пути они ничего не делают.

Предикаты ввода с консоли.

ReadString(<свободная переменная>) - читает с консоли строку. В качестве параметра обязательно должна передаваться свободная переменная. В противном случае будет выдано сообщение об ошибке и программа закончит свою работу.

ReadInteger(<свободная переменная>) - читает с консоли целое число.

ReadReal(<свободная переменная>) - читает с консоли реальное число.

Предикаты вывода на консоль.

Write (<переменная или константа любого типа>, ...) - печать на консоль содержание переменной. Количество аргументов у предиката произвольно. Количество аргументов у предиката произвольно. Стиль вывода на печать устанавливается в опциях проекта. Например, в процессе отладки можно включить печать имен переменных вместе с их содержимым или кавычки у строковых переменных.

WriteLn (<переменная или константа любого типа>, ...) - печать на консоль содержание переменной или константы и перевод курсора на следующую строку. Количество аргументов у предиката произвольно.

Nl - перевод курсора консоли на следующую строку.

Предикаты определения типов переменных.

IsInteger(<переменная>) - предикат является истинным, если поступающая на вход переменная - целочисленная.

IsReal(<переменная>) - проверяет, является ли переменная реальным числом.

IsNumeric(<переменная>) - проверяет, является ли переменная числовой, то есть либо реальной, либо целой. Использование функции IsNumeric предпочтительнее, чем IsInteger и IsReal, так как в ходе некоторых арифметических операций над целыми числами результат получается дробным (например, при делении).

IsString(<переменная>) - проверяет, является ли переменная строкой.

IsBoolean(<переменная>) - проверяет, является ли переменная логической.

IsList(<переменная>) - проверяет, является ли переменная списком.

IsStruct(<переменная>) - проверяет, является ли переменная структурой.

IsFree(<переменная>) - проверяет, является ли переменная свободной.

Предикаты для работы с базами данных.

Предикаты открытия, закрытия и создания баз данных отсутствуют, так как объявленные базы данных открываются (и создаются, если не были созданы ранее) при запуске программы.

DBAppendZ(<имя базы>:String, <поле1>, ... , <полеN>) - добавляет запись в конец базы данных. Количество полей и их типы должны в точности совпадать с полями базы данных. Имя базы данных записывается в кавычках.

DBAppendA(<имя базы>:String, <поле1>, ... , <полеN>) - добавляет запись в начало базы данных. Количество полей и их типы должны в точности совпадать с полями базы данных. Имя базы данных записывается в кавычках.

DBDelete(<имя базы>:String, <поле1>, ... , <полеN>) - удаляет из базы данных запись. Количество полей и их типы должны в точности совпадать с полями базы данных. Возможно, удалять сразу группу записей, если какие-либо из полей будут обозначены пустой константой nil. Тогда будут удалены все записи базы данных, в которых совпадают значения остальных полей (которые имеют значения отличные от nil).

DBClear(<имя базы>:String) - очищает базу данных.

Предикаты работы с файлами.

Данная версия Пролога работает только с текстовыми файлами.

Для идентификации файла при работе программы используется целочисленный номер обработчика файла, по которому можно обращаться к файлу.

FileOpenRead(<имя файла>:String, <номер обработчика>:Integer) - открыть файл для чтения. Предикат возвращает во втором параметре номер обработчика файла. Во втором параметре предиката должна стоять свободная переменная.

FileOpenWrite(<имя файла>:String, <номер обработчика>:Integer) - открыть файл для записи. Предикат возвращает во втором параметре номер обработчика файла. Во втором параметре предиката должна стоять свободная переменная.

FileRead(<номер обработчика>:Integer,<значение>) - чтение из файла. Второй параметр должен быть свободной переменной, иначе интерпретатор выдаст ошибку "Неверные параметры при вызове предиката".

FileWrite(<номер обработчика>:Integer,<значение>:String) - запись в файл.

FileClose(<номер обработчика>:Integer) - закрытие файла. Данный предикат применять не обязательно, так как при завершении программы интерпретатор сам закрывает все открытые файлы.

EOF(<номер обработчика>:Integer) - проверка конца файла. Предикат истинен, если конец файла достигнут.

Разное.

StringToList (String, <список>) - превращает строку в список, состоящий из символов этой строки, и возвращает его через параметр <список>.

Fail - предикат всегда возвращает ложь.

3.8 Описание функций

Арифметические функции.

Sin (<Integer, Real>):Real - операция синуса. Аргументом может быть как реальное, так и целое число. Функция возращает реальное число.

Cos (<Integer, Real>) :Real - операция косинуса.

Tan (<Integer, Real>) :Real - операция тангенса.

Exp (<Integer, Real>) :Real - экспонента.

Ln (<Integer, Real>) :Real - натуральный логарифм.

Int (<Integer, Real>) :Integer - выделение целой части числа. Функция используется также для явного преобразования реального числа в целое.

Frac (<Integer, Real>) :Real - выделение дробной части числа.

Abs(<Integer, Real>):<Integer, Real> - взятие модуля числа.

Функции работы со строками.

SubStr(String, N1:Integer, N2:Integer):String - выделение подстроки, начиная с элемента с индексом N1 длиной N2 символов.

FindStr(S1:String, S2:String):Integer - находит позицию подстроки S2 в строке S1 и возвращает индекс первого символа подстроки в строке S1. Если в строке S1 не было найдено подстроки S2, то функция возвращает 0.

Chr(Integer):String - возвращает символ, соответствующий числу по таблице ASCII.

Asc(String):Integer - возвращает ASCII-код первого символа строки.

NumbToStr(<Integer или Real>):String - превращает число в строку

StrToNumb(String):<Integer или Real> - превращает строку в целое или реальное число, в зависимости от содержания строки. Интерпретатор сначала пытается преобразовать строку в целое число. Если не получается, то пытается превратить строку в реальное число. Если преобразование не удалось, то выводится сообщение об ошибке.

Логические функции.

Not(Boolean):Boolean - инвертирует значение логического выражения. (ВНИМАНИЕ: чтобы инвертировать значение, возвращаемое предикатом или базой данных необходимо перед именем предиката или базы данных поставить символ "~")


4 Организационно-экономическая часть 4.1 Расчет затрат на разработку интерпретатора Пролог

Трудоемкость разработки программного обеспечения рассчитывается по формуле:

 ч/м, где (4.1)

L - объем программы в операторах, шт.,

nn - норма производительности труда программиста, представляющая собой объем полезной работы, выполняемой в единицу времени,

Ф - среднемесячный фонд рабочего времени,

Кн - коэффициент новизны,

Кун - коэффициент использования в разработке типовых программ.

L = 10000

nn = 50

Ф = 25

Кн = 0.8

Кун = 0.7

Таким образом, трудоемкость разработки ПО составляет:

Tn = (10000·0.8·0.7)/(25·50) = 4.5 ч/м

Расчет стоимости ч/м программиста:

·        заработная плата программиста составляет 460 руб.

·        дополнительная заработная плата составляет 20% от основной, то есть 92 руб.

·        Начисления на заработную плату ,в целом, составляют 38.5% от основной и дополнительной заработной платы, 212.52 руб.

Итого стоимость ч/м:

460+92+212.52=764.52 руб.

Накладные расходы составляют:

Знакл=0.25·460=115 руб.

Стоимость одного машинного часа с учетом первоначальной стоимости ЭВМ, стоимости потребляемой электроэнергии и износа машины определяетсяпо формуле:

Sмч=Sмаш1+Sэл+Sрем.

Срок службы ЭВМ - 8 лет. Первоначальная стоимость - 20000 руб. Потребляемая мощность 0.2 кВт/ч.

При эксплуатации машины 8 часов в день имеем:

Sмаш1=20000/(8·12·22·8)=1.18 руб/ч.

Принимая стоимость электроэнергии 0.1 руб/КВт, стоимость потребляемой энергии в час равна:

Sэл=0.1·0.2=0.02 руб.

Затраты на профилактическое обслуживание и ремон составляют 20% от стоимости машины:

Sрем=0.2·1.18=0.17руб.

Тогда стоимость одного машинного часа равна

Sмч=1.18+0.2+0.17=1.37 руб/ч.

Себестоимость программного продукта определяется:

, где

Зод - сумма основной и дополнительной заработной платы разработчика программы, начисления на нее и накладные расходы, руб./мес.,

Тап - время затрачиваемое разработчиком на разработку, составление алгоритма и написание программы, мес.,

См - себестоимость одного часа машинного времени, руб.,

Кисп = 0.5 - коэффициент использования ЭВМ.

764.52·4.5+8·4.5·1.37·25·0.5= 4056.84 руб.



Информация о работе «Интерпретатор языка Пролог»
Раздел: Информатика, программирование
Количество знаков с пробелами: 141139
Количество таблиц: 6
Количество изображений: 10

Похожие работы

Скачать
23064
0
0

... программ, которые применяются для передачи компьютеру инструкций по выполнению того или иного вычислительного процесса и организации управления отдельными устройствами. Задача: язык программирования отличается от естественных языков тем, что предназначен для передачи команд и данных от человека компьютеру, в то время как естественные языки используются лишь для общения людей между ...

Скачать
170298
0
0

... 2.2 Понятия языка Лисп ________________________________ 2.2.1 Атомы и списки _____________________________ 2.2.2 Внутреннее представление списка _____________ 2.2.3 Написание программы на Лиспе _______________ 2.2.4 Определение функций _______________________ 2.2.5 Рекурсия и итерация _________________________ 2.2.6 Функции интерпретации выражений ____________ 2.2.7 Макросредства ...

Скачать
48658
0
0

... времени на возню с файлами на дисках или ожидание ввода, не смогут продемонстрировать какое-то впечатляющее увеличение скорости. 2. КЛАССИФИКАЦИЯ ЯЗЫКОВ ПРОГРАММИРОВАНИЯ 2.1. Машинно – ориентированные языки  Машинно – ориентированные языки – это языки, наборы операторов и изобразительные средства которых существенно зависят от особенностей ЭВМ (внутреннего языка, структуры памяти и ...

Скачать
37377
0
0

... ИИ считают, что нет необходимости выделять фреймовые модели представления знаний, так как в них объединены все основные особенности моделей остальных типов. Глава 2. Моделирование рассуждений Представление знаний - одно из наиболее сформировавшихся направлений искусственного интеллекта. Традиционно к нему относилась разработка формальных языков и программных средств для отображения и ...

0 комментариев


Наверх