Навигация
Главная
Поиск
Форум
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
Эмулятор микроп... 65535
Подключение Mic... 65535
Создание потоко... 65535
Приложение «Про... 65535
Оператор выбора... 65535
Создание отчето... 64234
Модуль Forms 63954
Пример работы с... 61065
ТЕХНОЛОГИИ ДОСТ... 60843
Имитационное мо... 56376
Реклама
Сейчас на сайте
Гостей: 7
На сайте нет зарегистрированных пользователей

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

Обратное размещение элементов ЭВС на Delphi + Пояснительная записка
База данных склада на Delphi + Схема БД
Моделирование интернет кафе на 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 Комментариев · 9605 Прочтений · Для печати

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


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



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

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

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

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

Пароль



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

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

Случайные загрузки
Еext Editor
Cooltray
WinAmp
Delphi 7 Enterpri...
RxLIB
Программирование ...
Библия хакера 2 К...
CaptionButton
Длинный заголовок...
Domen Name IP
AID антивирус
Tetris 2002
Print Grid
начисление процен...
Delphix Sample [И...
Dbgridpack
Мод "проверочный ...
Популярные загрузки
Drag&Drop
Векторный редакто...

Топ загрузок
Приложение Клие... 100455
Delphi 7 Enterp... 86160
Converter AMR<-... 20072
GPSS World Stud... 12525
Borland C++Buil... 11612
Borland Delphi ... 8526
Turbo Pascal fo... 7035
Visual Studio 2... 4992
Калькулятор [Ис... 4744
FreeSMS v1.3.1 3539
Случайные статьи
Блейд-серверы DELL...
Köögim&#...
Тестирование приме...
Реализация контейн...
OrderID — номер за...
Оценка точности оп...
Язык С: директива ...
Выноски
Объяснение
Файловая система t...
СТАНДАРТНЫЕ ЧИСЛОВ...
ESP-пакеты позволя...
INCREMENT (УВЕЛИЧИТЬ)
Стандарты программ...
Мультиметоды для к...
Оптимизация алгоритма
Заголовок диаграммы
Этап идентификации
Реализация интерфе...
Полнодуплексные ас...
1.3. Схема алгорит...
Как быть, если на ...
Снова интерфейс и ...
Современная реализ...
Аутентификация уст...
Статистика



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


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