Информационный сайт

 

Реклама
bulletinsite.net -> Книги на сайте -> Программисту -> Непейвода Н.Н. -> "Основания программирования " -> 265

Основания программирования - Непейвода Н.Н.

Непейвода Н.Н., Скопин И.Н. Основания программирования — Институт компьютерных исследований , 2002. — 919 c.
Скачать (прямая ссылка): osnovanprogramm2002.pdf
Предыдущая << 1 .. 259 260 261 262 263 264 < 265 > 266 267 268 269 270 271 .. 316 >> Следующая

В вычислениях вариантов могут присутствовать там, где это необходимо (где распозна тся тупики), операторы return-back. о структурная вло-енность в подобных вчислениях явно концептуально противоречит идее, поэтому, а так е потому, что в то время она ее не бла идолизирована, в PLANNER использована переключательная схема: backtracking: go to M1, Mk
Конечно же, PROLOG, отделенный от PLANNER всего несколькими годами, реализовал эту иде несравненно луче. Здесь сработал ее и тот эффект, что PLANNER не успел декларировать блестящие успехи17 и осуще-
17 Насколько они реальны, в подобных случаях уже второй вопрос. Главное: успеть прокричать о своем успехе и загадить экологическую нишу.
762
13.
ствить захват экологической нии.
13.2.4. Динамическое пополнение и порождение программы
Поскольку структура программы и структура поля зрения практически изоморфны, естественно ставить вопрос о динамическом поро дении PROLOG-программ. Кроме этого высокоуровневого сообра ения, есть и прагматическое, которое можно извлечь из нашей программы 13.2.2. В нее мы были вынуждены записать и определение лабиринта. Конечно же, можно было бы прочитать с помощью встроенной функции read определение лабиринта и записать его в список, но тогда м почти утратили бы все преимуества языка PROLOG, не избавившись при этом ни от одного его недостатка. Гораздо естественнее иметь возмо ность прочитать базу даннх из файла.
Для этой цели в PROLOG был введен встроенный предикат consult(file[.pl]). Он читает предложения и факты из файла и помещает их в конец программы, тем самм оставляя в неприкосновенности ранее данные определения предикатов. С его использованием наа программа мо ет бть переписана в следуем виде.
Программа 13.2.3 Вводимый лабиринт
way0(X,Y,Z):-consult(labyr),way(X,Y,Z). way(X X [X]).
way(X,Y,[Y|Z]):-connect(U,Y), not member(Y,Z),way(X,U,Z). way(X,Y,[Y|Z]):-connect(U,Y), way(X,U,Z).
ример файла labyr.pl:
connect(begin,1).
connect(1,begin).
connect(1,2).
connect(2,3).
connect(3,1).
connect(3,4).
connect(4,end).
Сравним программу 13.2.3 с теми программами, которые были рассмо-треті при решениии той же задачи при помощи рекурсий в § 11.4. Эта программа представляет лишь идею решения. Но идея затемнена частностями языка PROLOG, которые все равно не дают возможность решить задачу столь
13.2.
763
е эффективно, как это делается на традиционном языке. В этом принципиальная разница языков PROLOG и Рефал. Рефал делает символьные преобразования столь е эффективно, как и программа на традиционном языке, и поэтому мо ет быть использован при квалифицированнном разделении стилей на всех уровнях: и для создания прототипа программы, и для написания надпрограммы, и для написания подпрограмм . PROLOG приспособлен для описания идеи решения, но отвратительно работает уже на уровне про-тотипирования.
Первоначально предикат consult предназначался для ввода фактов, но затем стало ясно, что иде и структуру языка не наруает и ввод произвольных предложений. Поэтому был определен предикат reconsult(file.pl), который помещает введенные предложения и факты в начало программы, тем самым заменяя данные в программе определения предикатов на содержащиеся во вненей базе знаний.
ля динамического поро дения фактов и предло ений име тся функции, разбирающие предложения и синтезирующие их. Предикаты могут быть объявлены метапредикатами, и тогда некоторые из их аргументов могут быть предложениями. Из метапредикатов важнее всего два, перечисленных ниже.
Метапредикат assert(P:-P1,... ,Pn) помещает свой аргумент в PROLOG-программу. ме тся несколько его вариантов, помеаие новое предло-ение или факт в начало или в конец программы. етапредикат retract(P:-P1,. . . ,Pn), наоборот, удаляет из программ предло ение или факт, унифицируемый с его аргументом.
С их помоь мо но, в частности, сымитировать все предло енне нами алгоритмы работы с лабиринтом, но при этом программа полность потеряет ясность структуры и станет крайне трудной для отладки и модификаций, а эффективности, сравнимой с традиционнм язком, достичь все равно не удастся.
ногие из реализаций языка PROLOG вкл ча т пакет прогонки, позволяющий осуществлять частичное вычисление PROLOG-программы.
Как руководство по программировани на язке PROLOG мо но использовать, скажем, книгу [12].
Поскольку в 1996 г. принят стандарт языка PROLOG [83], мы использовали лиь те его возмо ности, которые согласу тся со стандартом.
Вариант сентенциального программирования, базируийся на возвратах и унификации, отлично сочетается с идеей маины потоков данных. о-этому японцы попытались использовать его в своем проекте ЭВМ 5-го поколения. Провал данного проекта надолго дискредитировал данное направле-
764
13.
ние, но к нему придется вернуться в будуем на другой технической и, видимо, на гораздо более концептуально выверенной программистской основе.
Тем более это неизбежно, потому что концепция унификации и возвратов после неудач исключительно хорошо подходит для выражения V-парал-лелизма (см. рило ение). Более того, у е име тся системы (в частности, Muse), реализующие этот вариант параллелизма в языке PROLOG.
Предыдущая << 1 .. 259 260 261 262 263 264 < 265 > 266 267 268 269 270 271 .. 316 >> Следующая
Реклама
Авторские права © 2009 AdsNet. Все права защищены.
Rambler's Top100