Навигация
Главная
Поиск
Форум
FAQ's
Ссылки
Карта сайта
Чат программистов

Статьи
-Delphi
-C/C++
-Turbo Pascal
-Assembler
-Java/JS
-PHP
-Perl
-DHTML
-Prolog
-GPSS
-Сайтостроительство
-CMS: PHP Fusion
-Инвестирование

Файлы
-Для программистов
-Компонеты для Delphi
-Исходники на Delphi
-Исходники на C/C++
-Книги по Delphi
-Книги по С/С++
-Книги по JAVA/JS
-Книги по Basic/VB/.NET
-Книги по PHP/MySQL
-Книги по Assembler
-PHP Fusion MOD'ы
-by Kest
Professional Download System
Реклама
Услуги

Автоматическое добавление статей на сайты на Wordpress, Joomla, DLE
Заказать продвижение сайта
Программа для рисования блок-схем
Инженерный калькулятор онлайн
Таблица сложения онлайн
Популярные статьи
OpenGL и Delphi... 65535
Форум на вашем ... 65535
HACK F.A.Q 65535
Бип из системно... 65535
Гостевая книга ... 65535
Invision Power ... 65535
Содержание сайт... 65535
Вызов хранимых ... 65535
Программируемая... 65535
Эмулятор микроп... 65535
Подключение Mic... 65535
Создание потоко... 65535
Приложение «Про... 65535
Оператор выбора... 65535
Организация зап... 65292
Создание отчето... 61750
Модуль Forms 61632
ТЕХНОЛОГИИ ДОСТ... 58198
Пример работы с... 55823
Имитационное мо... 53568
Реклама
Сейчас на сайте
Гостей: 14
На сайте нет зарегистрированных пользователей

Пользователей: 13,069
новичок: momotw
Новости
Реклама
Выполняем курсовые и лабораторные по разным языкам программирования
Подробнее - курсовые и лабораторные на заказ
Delphi, Turbo Pascal, Assembler, C, C++, C#, Visual Basic, Java, GPSS, Prolog, 3D MAX, Компас 3D
Заказать программу для Windows Mobile, Symbian

Моделирование интернет магазина (Apache, Php, Html) на GPSS + Блок схема
Моделирование работы обрабатывающего участка цеха в GPSS
Моделирование станции технического обслуживания на GPSS + Отчет

Реклама



Подписывайся на YouTube канал о программировании, что бы не пропустить новые видео!

ПОДПИСЫВАЙСЯ на канал о программировании
8.2. Типичные ошибки


В этом разделе мы рассмотрим те ошибки, которые допускают как начинающие, так и опытные программисты, использующие Пролог. Эти ошибки делятся на две группы: синтаксические ошибки и ошибки управления последовательностью обработки.
После того, как программист решил, какую программу он будет писать и как разместит ее текст на странице печатающего устройства (или на экране видеотерминала), ему остается ввести текст программы, записав его в файл или непосредственно в базу данных Пролог-системы. Основная задача данного этапа – это обеспечить синтаксическую правильность программы. Ниже приводится список типичных синтаксических ошибок. Если программист сам не выявит эти ошибки, то при попытке выполнить предикат consult Пролог может выдать соответствующее сообщение.
• Одной из типичных синтаксических ошибок является отсутствие точки '.' в конце утверждения. Точкой должен заканчиваться и любой терм, считываемый с помощью предиката read . После точки нужно оставлять хотя бы один пробел. Поэтому избегайте заканчивать файл вместе с вводом точки последнего утверждения – убедитесь в том, что в самом конце вы не забыли нажать клавишу RETURN .
• Некоторые специальные литеры используются парами. К ним относятся круглые скобки '(' и ')', используемые для группирования термов, квадратные скобки '[' и ']', используемые для задания списков, и фигурные скобки '{' и '}', используемые для записи правил грамматики (см. гл. 9). Сюда же относятся двойные кавычки '"' используемые для ограничения строк и одиночная кавычка '", используемая для задания атомов. Составные скобки '/*' и '*/' используются для ограничения комментариев. Убедитесь, что скобок каждого вида задано не больше и не меньше чем необходимо.
• Остерегайтесь неправильного написания слов, особенно имен встроенных предикатов. Это может привести к самым неожиданным ошибкам, поскольку неверно записанные имена предикатов вряд ли сопоставятся с каким-либо утверждением в базе данных. Или наоборот, они могут неожиданно сопоставиться с утверждениями, заголовок которых случайно совпадает с получившимся именем.
• Еще одним источником возможных ошибок являются операторы. Когда вы не уверены в ассоциативных свойствах оператора, то используйте круглые скобки, чтобы задать нужные свойства явно. Проверяйте экспериментально действие введенных вами операторов с помощью предиката display .
• Когда имеете дело с операциями над списками, проверяйте себя с помощью следующих вопросов и ответов:
• Как сопоставляются [а,b,с] и [X|Y] ? ( X конкретизируется значением a , a Y - значением [b,с] ).
• Сопоставимы ли [а] и [X|Y] ? (Да, причем X конкретизируется значением a , a Y – значением [] ).
• Сопоставимы ли [] и [X|Y] ? (Нет).
• Имеет ли смысл запись [X, Y|Z] ? (Да).
• Имеет ли смысл запись [X|Y,Z] ? (Нет).
• Имеет ли смысл запись [Х|[Y|Z] ? (Да, это то же самое, что [X,Y|Z] )
• Как сопоставляются [a, b] и [А |В] ? ( А конкретизируется значением а , а В - значением [b] ).
• Существует ли более одного способа сопоставления приведенных выражений? (Нет, никогда).
Необходимо подчеркнуть, что когда приходится иметь дело со списками или другими структурами подобного рода, полезно прибегать к помощи «древовидных диаграмм», о которых говорилось в гл. 2.
Даже в тех случаях, когда вы уверены, что в программе нет синтаксических ошибок, она все-таки при попытке согласования целевых утверждений может вести себя непредсказуемо; характерными признаками этого являются: впечатление, что программа никогда не остановится («бесконечный цикл»), неожиданные появления отрицательных ответов (нет) , или конкретизация переменных не теми значениями, какие ожидались. Приведем обычные причины подобных ошибок:
• Циклические определения, о которых упоминалось в гл. 3.
• Недостаточность граничных условий или какая-либо другая недоопределенность задачи.
• Бесполезные процедуры, которые переопределяют встроенные предикаты.
• Задание неверного количества аргументов для функтора. Это не рассматривается как синтаксическая ошибка, поскольку количество аргументов функтора может быть разным.
• Неожиданный выход на конец файла при выполнении предиката чтения read .
Остерегайтесь следующих заблуждений относительно принципов работы механизма возврата:
• Заблуждение: Одна из причин использования возвратного хода состоит в том, что Пролог может вернуться к предыдущему сопоставлению и выполнить его снова некоторым другим способом.
На самом деле: Когда Пролог просматривает базу данных, пытаясь сопоставить цели что-либо из базы данных (какой-нибудь факт или заголовок правила), то сопоставление бывает либо успешным, либо неудачным. Пролог никогда не делает возвратный ход ни к какому сопоставлению, в попытке осуществить его по-другому, поскольку сопоставить конкретную цель с конкретным утверждением в базе данных можно только одним-единственным способом.
• Заблуждение: Запись списка [X|Y] может быть сопоставлена с любым отрезком списка, и при этом разбиение списков на части может быть осуществлено несколькими разными способами. Именно этим объясняется действие предиката присоединить (X, Y, [a,b,c,d]).
На самом деле: В записи списка [X|Y] X сопоставляется только с головой списка, a Y сопоставляется только с его хвостом. Цели с предикатом присоединить способны находить разные разбиения списков благодаря возможностям возвратного хода, а не возможностям сопоставления.
Опубликовал Kest July 10 2009 01:24:24 · 0 Комментариев · 9390 Прочтений · Для печати

• Не нашли ответ на свой вопрос? Тогда задайте вопрос в комментариях или на форуме! •


Комментарии
Нет комментариев.
Добавить комментарий
Имя:



smiley smiley smiley smiley smiley smiley smiley smiley smiley
Запретить смайлики в комментариях

Введите проверочный код:* =
Рейтинги
Рейтинг доступен только для пользователей.

Пожалуйста, залогиньтесь или зарегистрируйтесь для голосования.

Нет данных для оценки.
Гость
Имя

Пароль



Вы не зарегистрированны?
Нажмите здесь для регистрации.

Забыли пароль?
Запросите новый здесь.
Поделиться ссылкой
Фолловь меня в Твиттере! • Смотрите канал о путешествияхКак приготовить мидии в тайланде?
Загрузки
Новые загрузки
iChat v.7.0 Final...
iComm v.6.1 - выв...
Visual Studio 200...
CodeGear RAD Stud...
Шаблон для новост...

Случайные загрузки
Proeffectimage
Dbgridpack
Программирование ...
Платформа програм...
ComboBox97
Мониторинг сервер...
Gold Submitter II...
CoolControls v3.0...
SearchAndReplace
Защита от спама ...
Шифрование по алг...
AlnComponents
ZipTV
Turbo Pascal for ...
Mass Photo Upload
PHP: обучение на ...
Billenium Effects...
Preview
SysInfo [Исходник...
Microsoft Press -...

Топ загрузок
Приложение Клие... 100399
Delphi 7 Enterp... 84044
Converter AMR<-... 20052
GPSS World Stud... 11501
Borland C++Buil... 11300
Borland Delphi ... 8251
Turbo Pascal fo... 6994
Visual Studio 2... 4975
Калькулятор [Ис... 4499
FreeSMS v1.3.1 3517
Случайные статьи
Форматирование выд...
компьютеры клиенто...
Вызов функций, нап...
NESSUS - современн...
Работа с API-интер...
Формат NdefRecord
Variable Identifie...
Я - Zend Certified...
Тонкости дизассемб...
Применение протоко...
Примеры программир...
Методы удаления из...
2.1. Мощь элемента...
Определить инициал...
Создание таблиц
Выработка решенияП...
Тестирование
Стоматологическая ...
АЛГОРИТМИЗАЦИЯ МОДЕЛИ
Цветовые обозначен...
Основные объекты W...
11.2. Простая быст...
Можно объявлять пе...
Фильтр "не(...)"
Выравнивание текст...
Статистика



Друзья сайта
Программы, игры


Полезно
В какую объединенную сеть входит классовая сеть? Суммирование маршрутов Занимают ли таблицы память маршрутизатора?