Читаем Фреймы для представления знаний полностью

Лингвистическая деятельность человека требует от него использования образований более крупных, чем те, которые могут быть описаны с помощью грамматических правил, а это в еще большей степени затрудняет понимание вопросов, связанных с разграничением синтаксиса и семантики. Рассмотрим следующую басню (У.Чейф, 1972):

"Жили-были волк и ягненок. Однажды увидел волк, что ягненок пьет воду из реки, и появилось у него желание съесть ягненка. Решил он найти себе хоть какое-то оправдание и, несмотря на то, что сам находился выше по течению, обвинил ягненка в том, что тот взбалтывает воду и не дает ему пить…"

Чтобы понять этот отрывок, надо ясно представить себе, что волк лжет! Чтобы понять ключевую фразу "несмотря на то, что...", надо знать, что жидкость не может двигаться вверх по течению, а это, в свою очередь, требует от нас понимания самих слов "вверх по течению". В рамках декларативной, основанной на исчислении предикатов логической системы фразу "выше по течению" можно задать в виде некоторой формулы, например:

[А находится выше по течению, чем В] \/ [Событие Т.B А поток мутный] => [Существует [Событие U.В В поток мутный]] /\ [U позже Т].

Однако более полное определение было бы гораздо сложнее. Например, как записать тот факт, что потоки воды, перемещая какие-либо предметы, обычно не изменяют их расположения относительно друг друга? Логик мог бы попытаться доказать его, исходя из достаточно сложной совокупности "локальных" аксиом и соответствующих правил индуктивного вывода. Представим эти знания с помощью особой структуры данных, которая автоматически переориентирует связи пространственных описаний с терминалов одного фрейма на терминалы другого в рамках одной и той же системы фреймов. И хотя это может рассматриваться как некоторый вид логики, здесь используются определенные механизмы такие же, как и для пространственного мышления.

Во многих случаях нам приходится иметь дело с изменяющимися во времени ситуациями или причинно следственными отношениями. Так, концепции "течение реки" может соответствовать система фреймов, аналогичная той, что показана на рис.2-1, где S1, S2 и S3 обозначают отдельные абстрактные участки реки. Если волк в соответствии с ранее рассмотренной схемой находится слева, а ягненок от него - справа, то S1, S2 и S3 "двигаются" мимо них также слева направо. Наше воображение именно так представляет себе эту картину, а для ее изменения требуются некоторые умственные усилия. Допустим, что участки реки S1, S2 или S3 видны только тогда, когда они располагаются прямо против волка или ягненка. Если последний взбалтывал воду на участке S3, то система фреймов укажет на то, что, поскольку этот участок перестанет быть видимым и не будет находиться вблизи волка, его претензии к ягненку безосновательны. Более подробная система могла бы иметь промежуточные фреймы, но ни для одного из них участок реки возле волка не был бы загрязнен.

Существует еще много нюансов, в которых следует разобраться. Что означает слово "взбалтывал" и почему это мешало волку пить? В обычных условиях с помощью элементов S могут быть представлены просто какие-то плавающие предметы, однако здесь S3 взаимодействует со словом "взбалтывал" и в результате получается нечто противоречащее действию "пить". Или такой вопрос: было ли доказано, что взбалтывание воды в реке обусловливает присутствие грязи в воде на участке S3, или же это указывается в одном из заранее заготовленных значений данного действия?

Почти любое событие, действие, изменение, перемещение объектов или даже передача информации в первом приближении могут быть представлены обобщенным событием в виде системы, состоящей из двух фреймов. Система фреймов может иметь пробелы для действующих лиц (агентов), инструментов, побочных явлений, предварительных условий, обобщенных траекторий, но, в отличие от переходных глаголов в теориях формальных грамматик, здесь имеется дополнительная возможность в явном виде представлять возможные изменения. Чтобы проверить, понял ли кто-либо то или иное событие "ли действие, можно построить соответствующую ему пару фреймов типа "до-после".

Перейти на страницу:

Похожие книги

Основы программирования в Linux
Основы программирования в Linux

В четвертом издании популярного руководства даны основы программирования в операционной системе Linux. Рассмотрены: использование библиотек C/C++ и стан­дартных средств разработки, организация системных вызовов, файловый ввод/вывод, взаимодействие процессов, программирование средствами командной оболочки, создание графических пользовательских интерфейсов с помощью инструментальных средств GTK+ или Qt, применение сокетов и др. Описана компиляция программ, их компоновка c библиотеками и работа с терминальным вводом/выводом. Даны приемы написания приложений в средах GNOME® и KDE®, хранения данных с использованием СУБД MySQL® и отладки программ. Книга хорошо структурирована, что делает обучение легким и быстрым. Для начинающих Linux-программистов

Нейл Мэтью , Ричард Стоунс , Татьяна Коротяева

ОС и Сети / Программирование / Книги по IT
C++
C++

С++ – это универсальный язык программирования, задуманный так, чтобы сделать программирование более приятным для серьезного программиста. За исключением второстепенных деталей С++ является надмножеством языка программирования C. Помимо возможностей, которые дает C, С++ предоставляет гибкие и эффективные средства определения новых типов. Используя определения новых типов, точно отвечающих концепциям приложения, программист может разделять разрабатываемую программу на легко поддающиеся контролю части. Такой метод построения программ часто называют абстракцией данных. Информация о типах содержится в некоторых объектах типов, определенных пользователем. Такие объекты просты и надежны в использовании в тех ситуациях, когда их тип нельзя установить на стадии компиляции. Программирование с применением таких объектов часто называют объектно-ориентированным. При правильном использовании этот метод дает более короткие, проще понимаемые и легче контролируемые программы. Ключевым понятием С++ является класс. Класс – это тип, определяемый пользователем. Классы обеспечивают сокрытие данных, гарантированную инициализацию данных, неявное преобразование типов для типов, определенных пользователем, динамическое задание типа, контролируемое пользователем управление памятью и механизмы перегрузки операций. С++ предоставляет гораздо лучшие, чем в C, средства выражения модульности программы и проверки типов. В языке есть также усовершенствования, не связанные непосредственно с классами, включающие в себя символические константы, inline-подстановку функций, параметры функции по умолчанию, перегруженные имена функций, операции управления свободной памятью и ссылочный тип. В С++ сохранены возможности языка C по работе с основными объектами аппаратного обеспечения (биты, байты, слова, адреса и т.п.). Это позволяет весьма эффективно реализовывать типы, определяемые пользователем. С++ и его стандартные библиотеки спроектированы так, чтобы обеспечивать переносимость. Имеющаяся на текущий момент реализация языка будет идти в большинстве систем, поддерживающих C. Из С++ программ можно использовать C библиотеки, и с С++ можно использовать большую часть инструментальных средств, поддерживающих программирование на C. Эта книга предназначена главным образом для того, чтобы помочь серьезным программистам изучить язык и применять его в нетривиальных проектах. В ней дано полное описание С++, много примеров и еще больше фрагментов программ.

Бьёрн Страуструп , Бьярн Страустрап , Мюррей Хилл

Программирование, программы, базы данных / Программирование / Книги по IT
Программирование. Принципы и практика использования C++ Исправленное издание
Программирование. Принципы и практика использования C++ Исправленное издание

Специальное издание самой читаемой и содержащей наиболее достоверные сведения книги по C++. Книга написана Бьярне Страуструпом — автором языка программирования C++ — и является каноническим изложением возможностей этого языка. Помимо подробного описания собственно языка, на страницах книги вы найдете доказавшие свою эффективность подходы к решению разнообразных задач проектирования и программирования. Многочисленные примеры демонстрируют как хороший стиль программирования на С-совместимом ядре C++, так и современный -ориентированный подход к созданию программных продуктов. Третье издание бестселлера было существенно переработано автором. Результатом этой переработки стала большая доступность книги для новичков. В то же время, текст обогатился сведениями и методиками программирования, которые могут оказаться полезными даже для многоопытных специалистов по C++. Не обойдены вниманием и нововведения языка: стандартная библиотека шаблонов (STL), пространства имен (namespaces), механизм идентификации типов во время выполнения (RTTI), явные приведения типов (cast-операторы) и другие. Настоящее специальное издание отличается от третьего добавлением двух новых приложений (посвященных локализации и безопасной обработке исключений средствами стандартной библиотеки), довольно многочисленными уточнениями в остальном тексте, а также исправлением множества опечаток. Книга адресована программистам, использующим в своей повседневной работе C++. Она также будет полезна преподавателям, студентам и всем, кто хочет ознакомиться с описанием языка «из первых рук».

Бьерн Страуструп , Бьёрн Страуструп , Валерий Федорович Альмухаметов , Ирина Сергеевна Козлова

Программирование, программы, базы данных / Базы данных / Программирование / Учебная и научная литература / Образование и наука / Книги по IT