Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Компиляция программы из среды Turbo-Prolog




Пример.

Пример.

Пример.

domains

list_num = integer * /* список целых чисел */

predicates

num (list_num)

или

domains

list_num = element * /* список чисел типа element */

element = integer /* тип element определен как целое*/

 

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

["Лена", "Петр", "Олег", "Сергей"];

[ 1, 2, 3, 6, 9, 3, 4];

[3.2, 4.6, 1.1, 2.64, 100.2];

[yesterday, today, tomorrow];

[element01] – список из одного элемента;

[ ] – пустой список;

G = graf ([a, b, c, d], [r(a, b), r(b, c), r(b, d), r(d, c)]) – описание графа в
виде совокупности списков его вершин и дуг (ребер).

 

Для повышения наглядности программ в Прологе предусматриваются специальные средства списковой нотации, позволяющие представлять списки не только в традиционном виде [элемент_1, элемент_2,..., элемент_N], но и в бинарной форме: [H | T], где H (Head) – это голова списка, T (Tail) – хвост или окончание списка, а знак «|» служит разделителем. Например, список [a, b, c, d] может быть записан следующими способами:

· [a] | [b, c, d];

· [a, b] | [c, d];

· [a, b, c] | [d];

· [a, b, c, d] | [ ].

Следует отметить, что аргумент Т может быть определен рекурсивно, т.е. может сам являться списком и в свою очередь также состоять из головы и хвоста. Для ограничения рекурсии в любом списке Пролог-программе используют символ пустой список [3].

Программа вычисления суммы элементов векторов X и Y, представленных в виде списков: X = (x1, x2,..., xN) и Y = (y1, y2,..., yN).

 

domains

vector = integer*

predicates

product (vector, vector, integer)

goal

product ([1, 2, 3], [7, 8, 9], Rez),

write ("Rez = ", Rez).

clauses

product([ ], [ ], 0).

product ([X | Xs], [Y | Ys], S):- product (Xs, Ys, Sp),

S = X + Y + Sp.

 

Поясним работу программы. Рекурсивное правило описывает отсроченные вычисления (табл. 3.2). После рекурсивного вызова остается невыполненным хвост правила, конец которого помещается в стек до тех пор, пока не произойдет сопоставление с первым вариантом правила. После того как это произойдет, частичная сумма Sp получит значение 0, и все накопленные в стеке хвостовые вычисления будут выполнены в обратном порядке.

Таблица 3.2.

Вызов предиката Подстановки Хвостовые вычисления Результат вычислений
product ([1, 2, 3], [7, 8, 9], Rez) X = 1, Y = 7, Xs = [2, 3], Ys = [8, 9], Rez=S S=X*Y+Sp S=1*7+43=50
product ([2, 3], [8, 9], Sp) X’ = 2, Y’= 8, Xs’ = [3], Ys’ = [9], Rez=Sp Sp=X’*Y’+Sp Sp=2*8+27=43
product ([3], [9], S’) X’’ = 3, Y’’ = 9, Xs’’ = [2, 3], Ys’’ = [8, 9], Sp=Sp’ Sp’=X’*Y’+Sp Sp’=3*9+0=27
product ([ ], [ ], Sp’’) Xs’’ = [ ], Ys’’ = [ ], Sp’’ = 0   Sp’’=0

3.7. Вызов внешних функций из Пролог-программы и интерфейс
с программами на других языках программирования

Вызов внешних функций из Пролог-программы продемонстрируем на примере реализации интерфейса с программой, написанной на языке программирования Borland C.

Основная программа на языке Турбо-Пролог [3] компилируется из среды в OBJ-файл. Во всех глобальных именах должен стоять предварительный символ подчеркивания. Описание внешней функции, которая будет вызвана из основной программы, имеет вид:

_имя_функции() – language c.




Поделиться с друзьями:


Дата добавления: 2014-12-29; Просмотров: 620; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.01 сек.