Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


Curcor(R1,C)




В першому виклику предикату cursor дві змінні R і C - вільні; що означає - предикат cursor буде викликатися потоковим зразком cursor (o,o). Змінні вільні, бо зустрічаються вперше. Аналізатор потоку взнає також, що, якщо змінна не використовується в голові фрази, тоді ця змінна буде вихідним аргументом в першому предикатному виклику в тілі фрази.

У виразі R1=R+1 аналізатор потоку встановлює, що змінна R прив'язана, тому що з'являється з предикату cursor. Якщо б вона була вільною, тоді б видавалось повідомлення про помилку. R1 стане після цього виклику відомим аргументом.

В останньому виклику cursor змінні R1 і С зустрічались попередньо, тому вони обробляються як аргументи входу, а виклик буде мати зразок потоку cursor (i,i).

Коли викликається предикат, визначений користувачем, тоді він обробляється аналогічно стандартному предикату. Наприклад,

Predicates

Changeattribute(Integer, Integer)

Clauses

changeattribute(NewAttrib, OldAttrib):-

Attribute(OldAttrib), attribute(NewAttrib).

 

Goal

changeattribute(112, Old), write("Hello"),

attribute(Old), write("there").

В розділі goal перший виклик предикату changeattrib зроблено потоковим зразком типу changeattrib(i,o) (тому що перший аргумент відомий - 112, а другий Old - ні). Звідки, в фразі для changeattrib змінна NewAttrib буде аргументом входу, а OldAttrib - аргументом виходу. Але, якщо потоковий аналізатор зустрічає першу підціль attribute(OldAttrib), тоді предикат attribute буде викликатись потоковим зразком attribute (o), а другий виклик attribute буде мати потоковий зразок attribute(i). Кінцевий виклик attribute в goal будет мати потоковий зразок входу, тому що Old з'являється із changeattrib.

 

10.2.Керування потоковим аналізом.

Якщо потоковий аналізатор взнає, що стандартний предикат викликається не існуючим потоковим зразком, тоді видається повідомлення про помилку. Це може допомогти ідентифікувати нісенітні потокові зразки при створенні предикатів користувача, які використовують стандартні предикати. Наприклад, якщо ви використовуєте предикат

Z = X + Y

де змінна Х або Y не зв'язана, тоді потоковий анализатор видасть повідомлення про помилку: не існує потокового зразка для цього предикату. Для керування такою ситуацією ми можемо використовувати стандартні предикати free і bound.

Припустимо, ми хочемо написати предикат plus для реалізації дії додавання при любих можливих потокових зразках. Програма зображена на малюнку 10.1 реалізує такий предикат.

 





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


Дата добавления: 2015-10-01; Мы поможем в написании ваших работ!; просмотров: 306 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Наглость – это ругаться с преподавателем по поводу четверки, хотя перед экзаменом уверен, что не знаешь даже на два. © Неизвестно
==> читать все изречения...

4710 - | 4265 -


© 2015-2026 lektsii.org - Контакты - Последнее добавление

Ген: 0.009 с.