Учебная работа. Курсовая работа: Разработки интеллектуальной справочной системы по музыкальным произведениям
ОГЛАВЛЕНИЕ
Список условных обозначений
Введение
1. Технико-экономическое обоснование проектируемой умственной системы
1.1 Актуальность разработки умственной справочной системы по музыкальным произведениям
1.2 Группы юзеров системы
1.2.1 Меломан
1.2.2 Начинающий слушатель
1.2.3 Обладатель музыкального магазина либо веб-магазина
1.2.4 Исполнитель
1.3 Анализ подобных систем
1.3.1 All Music Guide
1.3.2 MusicBrainz!
1.3.3 Музыкальный словарь Гроува
1.3.4 Сопоставление подобных систем с умственным справочником по музыкальным произведениям
2. база познаний проектируемой умственной системы
2.1 Задачно-ориентированная спецификация базы познаний проектируемой умственной системы
2.1.1 Тестовый сборник вопросцев
2.1.2 Перечень применяемых в базе познаний проектируемой умственной справочной системы ip-компонентов
2.2 Онтология базы познаний проектируемой умственной системы
2.3 Содержательная декомпозиция базы познаний проектируемой умственной системы
2.4 Начальные тексты базы познаний макета умственной системы
2.5 Верификация и отладка базы познаний макета умственной системы
2.6 Спецификация разработанной базы познаний умственной системы и сертификация разработанных ip-компоненто
3. Машинка обработки познаний проектируемой умственной справочной системы
3.1 Задачно-ориентированная спецификация машинки обработки познаний проектируемой умственной справочной системы
3.1.1 Тестовый перечень задач
3.1.2 Содержательная систематизация задач
3.1.3 Перечень применяемых в операциях ip-компонентов
3.1.4 систематизация и спецификация операций проектируемой машинки обработки познаний
3.1.5 Декомпозиция операций на подпрограммы и содержательная структура библиотеки программ специфицированных операций
3.2 Методы и начальные тексты программ, реализующие операции машинки обработки познаний макета умственной справочной системы
3.3 Верификация и отладка программ специфицированных операций
3.4 Спецификация разработанных операций и библиотеки программ, сертификация разработанных ip-компонентов
4. Пользовательский интерфейс проектируемой умственной справочной системы
4.1 Задачно-ориентированная спецификация пользовательского интерфейса проектируемой умственной системы
4.1.1 Декомпозиция пользовательского интерфейса
4.1.2 Перечень применяемых ip-компонентов пользовательского интерфейса
4.2 Проектирование интерфейсных подсистем
4.3 Верификация и отладка пользовательского интерфейса
4.4 Спецификация разработанного пользовательского интерфейса, сертификация разработанных ip-компонентов
5. Интеграция разработанной системы с иными системами
6. Направления предстоящего развития макета умственной справочной системы и пути промышленного производства спроектированной умственной системы
7. Вклад в развитие семантических технологий проектирования умственных систем
7.1 Перечень выявленных ошибок среды проектирования умственных систем
7.2 Перечень предложений по совершенствованию среды проектирования умственных систем
7.3 Перечень предложений по совершенствованию семантических технологий проектирования умственных систем
7.4 Создание и внедрение ip-компонентов
Библиографический указатель
Список условных обозначений
МП – музыкальные произведения
БЗ – база познаний
ИСС – умственная справочная система
МОЗ – машинка обработки познаний
ПИ – пользовательский интерфейс
Введение
Независимо от рода деятель, возраста и пола, хоть какому из нас приходилось сталкиваться с таковым понятием как музыка. И если ранее это было не достаточно всераспространенным, легкодоступным для узенького круга людей, то в наши деньки тяжело повстречать человека, который никогда не слышал «магических» звуков музыки. В наши деньки можно гласить о целой музыкальной промышленности, людей и средств, в какой задействовано не меньше, чем в автомобилестроении либо разработке IT-технологий. Одни зарабатывают на этом средства: устраивая звукозаписывающие лейблы и студии, предоставляя свои услуги по записи, продюсированию исполнителей; открывают обыденные и веб-магазины, где удачно и не весьма занимаются продажей уже готовой продукции (кассеты, компакт-диски, DVD-диски, и даже, для особенных «гурманов», виниловые пластинки с композициями разных жанров и направлений). У остальных музыка – это метод самовыражения: поиск сподвижников, создание группы, а может быть выступление соло, написание текста и сочинение музыки, потом запись на студии, организация концертов. Третьи выступают в роли потребителей: скупают компакт-диски с альбомами возлюбленных групп и исполнителей, посещают концерты, чтоб вживую услышать кумиров. Не стоит забывать и про тех, для кого музыка это просто приятный фон дома, на работе либо в авто, который помогает скрасить сероватые будни крупных городов.
Желаю направить внимание на определения: звукозаписывающие лейблы, компакт-диски, виниловые пластинки, группы, направление, жанры и т.д. и т.п.. И если с осознанием что это и для что оно необходимо посодействуют совладать какая-нибудь музыкальная энциклопедия либо всесущий Гугл. То, что созодать и у кого просить помощи, когда возлюбленная композиция опосля н-ного раза прослушивания перестает нравиться, а домашняя коллекция прослушана и переслушана вдоль и поперек. Да, песен и исполнителей в мире много. Есть малеханькое «но» — их очень много! Так в электрической версии «Музыкального словаря Гроува» содержится 27000 композиций поп-музыки либо наиболее 50 дней непрерывного прослушивания (если допустить, что средняя длительность композиции около 3 минут). А ведь жанров и направлений не меньше сотки! Так и целой жизни будет не достаточно, чтоб переслушать все, что сочинил музыкальный гений человека, и избрать конкретно то, что подступает по вкусу.
Можно выделить несколько качеств трудности выбора и поиска музыкальных произведений:
— большенный размер неструктурированной инфы, лежащей в разных местах;
— трудность формализации, а иногда и отсутствие, правил описания и оценки музыкальных произведений;
— формулирование запроса для поиска композиции. Как гласил узнаваемый герой не наименее известного кинофильма: «А ну, сочини для меня чего-нибудть такое, чтобы душа поначалу развернулась, а позже назад обвернулась».
Такие тяжеловесы как Microsoft Corp. и Яху Inc. растрачивают млрд баксов, пытаясь отобрать у Гугл хотя бы маленькой сектор рынка веб-поиска. Но параллельно этому, растущие нишевые поисковые системы переосмысляют метод поиска инфы, разрабатывая инструменты, которые кропотливо отыскивают настоящий смысл слов на Интернет-страницах заместо того, чтоб просто предоставить перечень веб-сайтов с совпадающими главными словами, эти претенденты уповают сделать сервисы, которые посодействуют юзерам резвее отыскивать то, что те отыскивают. Пользователи желают отыскивать информацию резвее, и они отыскивают инструменты, которые посодействовали бы им создать это. Такие поисковые системы употребляют семантическую науку, изучающую смысл слов, чтоб создавать наиболее релевантный поиск. Дело в том, что уровень контекста дозволяет семантическим поисковым системам представлять информацию в согласовании с тем, как обычно задумываются люди. Семантический поиск представляет энтузиазм, как для личных бизнесменов, так и для больших компаний. Ключ к успеху семантического поиска в том, чтоб выдать результаты в контексте. Это трудно, потому что объём инфы всё увеличивается. Причина, по которой люди желают разрабатывать семантические поисковые машины, в том, что это наилучший метод нахождения инфы. Беря во внимание, что объём контента растёт всё резвее, поисковые системы должны быть наиболее эффективны и работать по эталону того, как задумываются люди. Подобные инструменты поиска демонстрируют связи меж разными документами и веб-сайтами, основываясь не на ссылках, а на инфы, содержащейся на страничках при помощи технологии под заглавием «графики семантических кластеров». Она показывает результаты в виде, который припоминает паучью сеть.
Одним из примеров умственных «помощников» является Семантическая Справочная Система (SRS), на базе которой была построена справочная система по музыкальным произведениям. SRS состоит из 3-х компонент:
база познаний (БЗ),
Машинка обработки познаний,
Пользовательский интерфейс.
Уточним задачки компонент:
База познаний нужна для хранения познаний о предметной области в системе.
Машинка обработки познаний нужна для воплощения поиска, навигации и обработки познаний.
Пользовательский интерфейс нужен для воплощения взаимодействия юзера с системой.
{Наполнение} базы познаний новенькими познаниями существенно сделает лучше прикладную умственную систему. юзер сумеет получить наиболее подробную и наиболее полную информацию о данной предметной области.
Разработка машинки обработки познаний переведет прикладную систему на отменно новейший уровень – уровень умственного решателя задач предметной области.
В итоге разработки пользовательского интерфейса покажутся новейшие способности, связанные с поиском по базе познаний, редактированием базы, что облегчит юзерам работу с прикладной умственной системой.
Целью работы является разработка проекта умственной справочной системы.
Задачки курсового проекта:
· технико-экономическое обоснование проектируемой умственной справочной системы;
· разработка базы познаний проектируемой умственной справочной системы;
· разработка машинки обработки познаний проектируемой умственной справочной системы;
· разработка пользовательского интерфейса умственной справочной системы;
· реализация макета умственной справочной системы.
1. Технико-экономическое обоснование проектируемой умственной системы
1.1 Актуальность разработки умственной справочной системы по музыкальным произведениям
Людям, которые хотят приобрести музыкальный компакт-диск либо скачать композицию из Веба, не постоянно удается затратить на это минимум собственного вольного времени и средств и достигнуть при всем этом наибольшей результативности. инфы содержащейся в буклете компакт-диска либо приобретенной от торговца почаще всего недостаточно для осознанного выбора. Данная умственная справочная система создана для того чтоб облегчить процесс выбора для несведущего пользователя музыкальной промышленности.
Перечислим более всераспространенные вопросцы, интересующие людей в отношении музыкальных произведений:
Общие вопросцы:
Какие музыкальные жанры есть?
На каких носителях можно приобрести муз.произведения?
Какие типы музыкальных обществ бывают?
и т.д.
Вопросцы для определенного произведения:
Кто создатель текста, музыки?
Кто исполнитель?
В которой альбом заходит?
В котором году издано?
и т.д.
Для нескольких произведений, альбомов, исполнителей:
Что общего меж этими альбомами?
и т.д.
Поиск музыкальных произведений:
Поиск по описанию текста, музыки.
Поиск по году издания, жанру, рейтингу в чартах.
Поиск по исполнителю, альбому.
Поиск создателя и наименования по фрагменту композиции.
Разрабатываемая умственная система ответит на подобные вопросцы юзера. Дополненная база познаний дозволит выполнить расширенный и углубленный поиск. Удачный интерфейс дозволит интуитивно и просто отыскать все интересующие юзера сведения. Конкретно потому разработка справочника является животрепещущей и нужной.
1.2 Группы юзеров системы
Разрабатываемая умственная справочная система имеет необъятную базу познаний и огромное количество многофункциональных способностей. Вследствие этого она поддерживает работу широкого круга юзеров. Можно выделить последующие группы юзеров:
· меломан
· начинающий слушатель
· обладатель музыкального магазина либо Интернет-магазина
· исполнитель
Дальше приведены портреты юзеров системы.
1.2.1 Меломан
Портрет:
В данную категорию юзеров попадают люди, отлично владеющие предметной областью. Они знают историю музыки, ориентируются в жанрах и направлениях. Могут верно сконструировать поисковый запрос, точно знают, что отыскивают. Они имеют возможность добавить новейшие познания, отредактировать либо уточнить уже имеющиеся.
Многофункциональные способности:
· добавление и удаление видеоклипов
· добавление и удаление аудиоматериала
· редактирование имеющихся познаний
· просмотр познаний содержащихся в БЗ
· поиск композиций по главным словам, по точным аспектам
Цели:
· пополнение собственных познаний
· поиск музыкальных произведений
· заимствование собственного опыта для наименее «продвинутых» юзеров
1.2.2 Начинающий слушатель
Портрет:
В данную категорию юзеров входят люди, которые хотят отыскать себе новейшую музыку, но может быть родственную с той, что ранее они слушали. Желающие познакомиться поближе с миром музыки, разобраться в ее жанрах и направлениях, открыть себе новейших исполнителей и группы. Начинающий слушатель не может верно сконструировать поисковый запрос, потому для него разработаны особые способности поиска.
Многофункциональные способности:
· просмотр познаний содержащихся в БЗ
· просмотр видеоклипов
· прослушивание музыкальных композиций
· поиск исполнителя по фрагменту музыкального произведения
· поиск композиций по главным словам в описании
· поиск композиций по чувственной расцветке музыки и текста
· поиск композиций по жанрам
· поиск композиций при помощи временной ленты
· получение ответа на нетривиальные вопросцы о музыкальных произведениях
Цели:
· получение базисных познаний в предметной области
· помощь в ориентировании по музыкальным произведениям
· поиск музыкальных произведений по разным признакам
1.2.3 обладатель музыкального магазина либо Интернет-магазина
Портрет:
В данную категорию юзеров входят люди специализирующиеся продажей носителей инфы с музыкальными произведениями, клипами, записями концертов и выступлений. Для их основное структурировать информацию о продукции, для облегчения предстоящей работы. Предоставление инфы по имеющемуся ассортименту конечным пользователям.
Многофункциональные способности:
· просмотр инфы о исполнителях, альбомах и композициях
· добавление инфы о новейших исполнителях, альбомах, композициях
· поиск музыкальных произведений
Цели:
· пополнение базы познаний новейшей информацией о исполнителях, альбомах и композициях
· предоставлении инфы конечному пользователю
1.2.4 Исполнитель
Портрет:
В данную категорию юзеров входят люди, специализирующиеся творческим действием: написанием музыки, текстов – созданием новейших музыкальных произведений. Для их будет любопытно просмотреть готовые композиции, чтоб ориентироваться в современной музыке.
Многофункциональные способности:
· поиск музыкальных произведений
· сопоставление музыкальных произведений
Цели:
· ориентирование в современной музыкальной промышленности
1.3 анализ подобных систем
1.3.1 All Music Guide
Большая онлайновая музыкальная база данных, принадлежащая организации All Media Guide. Данный продукт является энциклопедией с комфортным графическим интерфейсом и поиском по главным словам, заглавиям произведений, альбомов, исполнителей, содержит отлично проработанную БД с огромным количеством инфы. язык интерфейса британский.
1.3.2 MusicBrainz!
Проект сотворения открытой музыкальной энциклопедии. MusicBrainz хранит сведения о музыке, которая когда-либо была записана, а не саму музыку. Все главные данные, хранимые в MusicBrainz (зафиксированные данные о исполнителях, альбомах, треках и т.п.) числятся публичным достоянием, а доп сведения, такие, как данные о модерациях, распространяются под лицензией Creative Commons non-commercial share-and-share-alike. язык интерфейса британский.
1.3.3 Музыкальный словарь Гроува
Английское справочное издание, посвящённое академической музыке. Под редакцией Лоры Мейси работает повсевременно обновляемая и пополняемая сетевая версия словаря. Годичная подписка на использование ею составляет 300 баксов. права на издание и онлайн-версию с 2004 г. принадлежат издательству Оксфордского института, вследствие что веб-сайт из Grove Music Online был переименован в Oxford Music Online. Содержит в себе наиболее 50000 статей и 28000 биографий, внесенных наиболее чем 6000 ученых со всего мира. язык интерфейса британский.
1.3.4 Сопоставление подобных систем с умственным справочником по музыкальным произведениям
В подобных системах не предусмотрен диалог юзера и системы, другими словами, нет способности задать справочникам вопросцы. В отличие от их в умственной справочной системе по музыкальным произведениям таковая возможность есть. Возможность диалога с системой показывает ее умственные возможности полностью. Она способно ответить на все обилие вопросцев, которые могут появиться у юзера в процессе поиска композиции, альбома либо исполнителя.
Так же можно сказать о том, что у умственной справочной системе достаточно обычный интерфейс. Юзер сумеет стремительно разобраться с способами получения нужной ему инфы.
2. база познаний проектируемой умственной системы
2.1 Задачно-ориентированная спецификация базы познаний проектируемой умственной системы
2.1.1 Тестовый сборник вопросцев
Описание тестовых вопросцев:
Все известные исполнители.
фото определенного исполнителя.
Альбомы избранного исполнителя.
Изображение обложки альбома.
Сопоставление 2-ух альбомов по их чертам.
Композиции входящие в избранный альбом.
Прослушивание композиции.
Просмотр видеоклипа на избранную композицю.
Поиск альбома по его чертам.
Поиск композиции по ее чертам.
Описание музыкального жанра.
Виды носителей.
Создатели текста и композиторы.
Список демо вопросцев:
Получение всех исполнителей БЗ.
Описание главных черт исполнителя.
Просмотр фото исполнителя.
Альбомы избранного исполнителя.
Просмотр обложки альбома.
Описание главных черт альбома.
Композиции входящие в данный альбом.
Описание главных черт композиции.
Поиск композиций по рейтингу.
2.1.2 Перечень применяемых в базе познаний проектируемой умственной справочной системы ip-компонентов
В данной умственной справочной системе применены начальные разделы база познаний help-системы:
ИсхБз. SC-ядро
ИсхБз. SCg-язык
ИсхБз. SС-язык множеств
ИсхБз. SС-язык отношений
ИсхБз. SС-язык числовых систем
ИсхБз. Логический SС-язык
ИсхБз. Гипермедийный SС-язык
ИсхБз. Дидактический SС-язык
ИсхБз. SС-язык описания ошибок
ИсхБз. Пользовательский интерфейс SRS
Включение этого компонента в проектируемую систему дозволяет уменьшить сроки разработки, потому что нет необходимости повторного проектирования данных фрагментов.
2.2 Онтология базы познаний проектируемой умственной системы
Бинарные дела:
«альбом*» — бинарное отношение меж исполнителем и его альбомами.
«композиция*» — бинарное отношение меж альбомом и композициями в него входящими.
«описание*» — бинарное отношение меж объектом и параметрами, его характеризующими.
«страна*» — бинарное отношение меж исполнителем и государством исполнителя.
«год*» — бинарное отношение меж исполнителем и годом его основания.
«вид*» — бинарное отношение меж исполнителем и его видом (группа, соло и т.д.).
«обложка*» — бинарное отношение меж альбомом и его обложкой.
«год выпуска*» — бинарное отношение меж альбомом и годом его выпуска.
«носитель*» — бинарное отношение меж альбомом и носителем, на котором он был издан.
«тип записи*» — бинарное отношение меж альбомом и типом его записи.
«размер*» — бинарное отношение меж альбомом и его объемом.
«заслуги*» — бинарное отношение меж альбомом и его заслугами.
«музыка*» — бинарное отношение меж композицией и его музыкой.
«текст*» — бинарное отношение меж композицией и его текстом.
«время*» — бинарное отношение меж композицией и его длительностью.
«пространство в чарте*» — бинарное отношение меж композицией и местом в чарте.
«лейбл*» — бинарное отношение меж композицией и лейблом звукозаписи.
«автор*» — бинарное отношение меж музыкой композиции и его композитором.
«создатель*» — бинарное отношение меж текстом композиции и его создателем.
«тема*» — бинарное отношение меж текстом композиции и его темой.
Всего: 20 бинарных отношений.
«Исполнители» — группа всех исполнителей.
«Альбомы» — группа всех альбомов.
«Композиции» — группа всех композиций.
«Носители» — группа всех носителей.
«Композиторы»» — группа всех композиторов музыки.
«Создатели» — группа всех создателей текста.
Всего: 6 узлов групп.
2.3 Содержательная декомпозиция базы познаний проектируемой умственной системы
Базу познаний можно поделить на фрагменты, в каких дается описание исполнителей, альбомов, МП и отношений меж ними.
Так при описании исполнителя представлены последующие свойства: страна*, год основания*, вид*. Пример описания 1-го из исполнителей представлен на рисунке 2.3.1.
Набросок 2.3.1. – Описание исполнителя
При описании альбома в качестве его черт представлены: обложка альбома*, год выпуска*, носитель*, тип записи*, размер*, заслуги*. Пример описания альбома представлен на рисунке 2.3.2.
Набросок 2.3.2. – Описание альбома
Пример описания МП представлен на рисунке 2.3.3.
Набросок 2.3.3. – Описание МП
Пример описания структуры отношений представлен на рисунке 2.3.4.
Набросок 2.3.4. – Описание структуры отношений
2.4 Начальные тексты базы познаний макета умственной системы
Начальные тексты базы познаний макета умственной системы хранятся в последующих файлах:
8diagrams_album.gwf
bringdaruckus_track.gwf
clapyohands_track.gwf
enterthewutang_album.gwf
familytree_track.gwf
iicons_album.gwf
intro.gwf
naughtybynature_artist.gwf
naughtybynature_struct.gwf
oldergods_track.gwf
povetry`sparadise_album.gwf
protectyaneck_track.gwf
shameonanigga_track.gwf
whatyouwannado_track.gwf
wutangclan_artist.gwf
wutangclan_struct.gwf
wutangforever_album.gwf
elmanana_track.gwf
feelgoodinc_track.gwf
ogreenworld_track.gwf
kidswithguns_track.gwf
lastlivingsouls_track.gwf
intro_track.gwf
demondays_album.gwf
gorillaz_struct.gwf
rockthehouse_track.gwf
doublebass_track.gwf
soundcheck_track.gwf
punk_track.gwf
manresearch_track.gwf
clinteastwood_track.gwf
newgenius_track.gwf
tomorrowcomestoday_track.gwf
54_track.gwf
re-hash_track.gwf
gorillaz_album.gwf
gorillaz_artist.gwf
Пример содержания этих файлов можно узреть на рисунках 2.3.1, 2.3.2, 2.3.3, 2.3.4.
2.5 Верификация и отладка базы познаний макета умственной системы
Верификация базы познаний в текущей версии умственной справочной системы по МП не выполнялась, потому что в предшествующей версии системы база познаний была хорошо организована. база была дополнена новенькими исполнителями, альбомами и композициями. Дополнение и проверка выполнялась при помощи SRS Studio.
2.6 Спецификация разработанной базы познаний умственной системы и сертификация разработанных ip-компонентов
В базе познаний на данный момент содержится 3 исполнителя, 7 альбомов и наиболее 20 композиций.
В качестве ip-компонентов могут быть применены:
определения понятий (МП, альбом, исполнитель, жанр и т.д.).
Музыкальные композиции.
Видеоклипы к музыкальным произведениям.
3. машинка обработки познаний проектируемой умственной справочной системы
3.1 Задачно-ориентированная спецификация машинки обработки познаний проектируемой умственной справочной системы
3.1.1 Тестовый перечень задач
Под предметными задачками будем осознавать все задачки, специфичные для данной предметной области:
· поиск исполнителей по описанию
· поиск инфы о исполнителях
· поиск альбомов по описанию
· поиск инфы о альбомах
· поиск МП по описанию
· сопоставление альбомов
3.1.2 Содержательная систематизация задач
Огромное количество предметных задач исходя из убеждений способов их решения можно разбить на два класса:
· информационно-поисковые задачки, ответы на которые находятся в базе познаний решателя предметных задач и, как следует, их нужно лишь отыскать;
· задачки, ответы на которые требуется выстроить.
Посреди информационно-поисковых задач можно выделить задачки, в каких цель поиска быть может буквально описана «шаблоном» поиска, т.е. результатом решения задачки будут все фрагменты семантической сети базы познаний, удовлетворяющие этому шаблону. Примерами таковых задач является
· поиск инфы о МП;
· поиск инфы о альбоме;
· поиск инфы о исполнителе.
Иным классом информационно-поисковых задач являются задачки, итог решения которых не описывается шаблоном, а осуществляется при помощи scp-программы. Примерами таковых задач являются:
· сопоставление альбомов;
· поиск альбомов по нескольким чертам;
· поиск МП по нескольким чертам.
3.1.3 Перечень применяемых в операциях ip-компонентов
В данной умственно справочной системе были применены последующие операции, являющиеся Ip-компонентами, и предоставленные совместно со средой разработки умственных справочных систем:
all_input
all_output_all_types
analogy
example
graph
lib
logic_queries
logical_hierarhy
paramsProcessing
printSetArcs
printSetElems
main_close
main_open
open
pack_menu
peresechenie
reduce_menu
remove_menu_item
searchEnvironmentSmart
searchPatternEx
synonym_by_node
synonym_by_node_ui
synonym_by_term_ui
tests
ui_io_build_srs
ui_io_copy_scg
ui_io_erase_scg_countur
ui_io_erase_scg_el
ui_io_exec_command
ui_io_gen_srswindow
ui_io_increase
ui_io_load_folder
ui_io_load_scg
ui_io_modify_scg_el_content
ui_io_modify_scg_el_name
ui_io_modify_scg_el_type
ui_io_paste_scg
ui_io_reduction
ui_io_save_scg
ui_io_select_all
ui_registration_type_wnd
ui_show_content
ui_show_content_swf
ui_unregistration_type_wnd
update_menu
ways
whatisknown
3.1.4 систематизация и спецификация операций проектируемой машинки обработки познаний
1. систематизация операции all_performers.m4scp.
Заглавие операции: all_performer.
Предметная ориентация: МП.
Входные характеристики: нет.
Выходные характеристики: все известные исполнители.
метод вызова: автоматом, при разработке окна пользовательского интерфейса.
Спецификация операции all_performers.m4scp.
Идентификатороперации: descr_all_performer.
Полноеимя: operation all_performers.m4scp.
Комментарий: операция поиска в БЗ всех узнаваемых исполнителей.
Создатель: Лукша Н.В.
2. систематизация операции all_albums_this_performer.m4scp.
Названиеоперации: all_albums_this_performer.
Предметная ориентация: МП.
Входные характеристики: узел с именованием исполнителя.
Выходные характеристики: все альбомы данного исполнителя.
метод вызова: при выбирании исполнителя из ListBox.
Спецификацияоперации all_albums_this_performer.m4scp.
Идентификатороперации: descr_all_albums_this_performer.
Полноеимя: operationall_albums_this_performer.m4scp.
Комментарий: операция поиска в БЗ всех альбомов данного исполнителя.
Создатель: Лукша Н.В.
3. систематизация операции all_tracks_this_album.m4scp.
Названиеоперации: all_tracks_this_album.
Предметная ориентация: МП.
Входные характеристики: узел с именованием альбома.
Выходные характеристики: все МП данного альбома.
метод вызова: при выбирании альбома из ListBox.
Спецификация операции all_tracks_this_album.m4scp.
Идентификатор операции: descr_all_tracks_this_album.
Полноеимя: operationall_tracks_this_album.m4scp.
Комментарий: операция поиска в БЗ всех МП из данного альбома.
Создатель: Лукша Н.В.
4. систематизация операции country_of_performer.m4scp.
Названиеоперации: country_of_performer.
Предметная ориентация: МП.
Входные характеристики: узел с именованием исполнителя.
Выходные характеристики: страна данного исполнителя.
метод вызова: при выбирании исполнителя из ListBox.
Спецификацияоперации country_of_performer.m4scp.
Идентификатороперации: descr_country_of_performer.
Полноеимя: operationcountry_of_performer.m4scp.
Комментарий: операция поиска в БЗ страны данного исполнителя.
Создатель: Лукша Н.В.
5. Систематизация операции kind_of_performer.m4scp.
Названиеоперации: kind_of_performer.
Предметная ориентация: МП.
Входные характеристики: узел с именованием исполнителя.
Выходные характеристики: вид данного исполнителя.
метод вызова: при выбирании исполнителя из ListBox.
Спецификацияоперации kind_of_performer.m4scp.
Идентификатороперации: descr_kind_of_performer.
Полноеимя: operationkind_of_performer.m4scp.
Комментарий: операция поиска в БЗ вида данного исполнителя.
Создатель: Лукша Н.В.
6. систематизация операции year_of_foundation.m4scp.
Названиеоперации: year_of_foundation.
Предметная ориентация: МП.
Входные характеристики: узел с именованием исполнителя.
Выходные характеристики: год основания данного исполнителя.
метод вызова: при выбирании исполнителя из ListBox.
Спецификацияоперации year_of_foundation.m4scp.
Идентификатороперации: descr_year_of_foundation.
Полноеимя: operationyear_of_foundation.m4scp.
Комментарий: операция поиска в БЗ года основания данного исполнителя.
Создатель: Лукша Н.В.
7. систематизация операции type_rec.m4scp.
Заглавие операции: type_rec.
Предметная ориентация: МП.
Входные характеристики: узел с именованием альбома.
Выходные характеристики: тип записи данного альбома.
метод вызова: при выбирании исполнителя из ListBox.
Спецификация операции type_rec.m4scp.
Идентификатор операции: descr_type_rec.
Полноеимя: operationtype_rec.m4scp.
Комментарий: операция поиска в БЗ типа записи данного альбома.
Создатель: Лукша Н.В.
8. систематизация операции vol.m4scp.
Заглавие операции: vol.
Предметная ориентация: МП.
Входные характеристики: узел с именованием альбома.
Выходные характеристики: тип записи данного альбома.
метод вызова: при выбирании исполнителя из ListBox.
Спецификация операции vol.m4scp.
Идентификатор операции: descr_vol.
Полноеимя: operationvol.m4scp.
Комментарий: операция поиска в БЗ типа записи данного альбома.
Создатель: Лукша Н.В.
9. систематизация операции style_of_track.m4scp.
Заглавие операции: style_of_track.
Предметная ориентация: МП.
Входные характеристики: узел с именованием альбома.
Выходные характеристики: тип записи данного альбома.
метод вызова: при выбирании исполнителя из ListBox.
Спецификация операции style_of_track.m4scp.
Идентификатороперации: descr_style_of_track.
Полноеимя: operationstyle_of_track.m4scp.
Комментарий: стиль МП.
Создатель: Лукша Н.В.
10. систематизация операции rewards.m4scp.
Заглавие операции: rewards.
Предметная ориентация: МП.
Входные характеристики: узел с именованием альбома.
Выходные характеристики: тип записи данного альбома.
метод вызова: при выбирании исполнителя из ListBox.
Спецификация операции rewards.m4scp.
Идентификатор операции: descr_rewards.
Полноеимя: operationrewards.m4scp.
Комментарий: заслуги данного альбома.
Создатель: Лукша Н.В.
11. систематизация операции type_rec.m4scp.
Заглавие операции: type_rec.
Предметная ориентация: МП.
Входные характеристики: узел с именованием альбома.
Выходные характеристики: тип записи данного альбома.
метод вызова: при выбирании исполнителя из ListBox.
Спецификация операции type_rec.m4scp.
Идентификатор операции: descr_type_rec.
Полноеимя: operationtype_rec.m4scp.
Комментарий: операция поиска в БЗ типа записи данного альбома.
Создатель: Лукша Н.В.
12. систематизация операции rating.m4scp.
Заглавие операции: rating.
Предметная ориентация: МП.
Входные характеристики: узел с именованием альбома.
Выходные характеристики: тип записи данного альбома.
метод вызова: при выбирании исполнителя из ListBox.
Спецификация операции rating.m4scp.
Идентификатор операции: descr_rating.
Полноеимя: operationrating.m4scp.
Комментарий: рейтинг данной композиции.
Создатель: Лукша Н.В.
13. систематизация операции label_rec.m4scp.
Заглавие операции: label_rec.
Предметная ориентация: МП.
Входные характеристики: узел с именованием альбома.
Выходные характеристики: тип записи данного альбома.
метод вызова: при выбирании исполнителя из ListBox.
Спецификация операции label_rec.m4scp.
Идентификатор операции: descr_label_rec.
Полноеимя: operationlabel_rec.m4scp.
Комментарий: поиск лейбла звукозаписи.
Создатель: Лукша Н.В.
3.1.5 Декомпозиция операций на подпрограммы и содержательная структура библиотеки программ специфицированных операций
В написанных scp-операциях подпрограммы не использовались.
3.2 методы и начальные тексты программ, реализующие операции машинки обработки познаний макета умственной справочной системы
· поиск альбома по описанию (файл search_by_param.m4scp)
· входные характеристики: узлы, характеризующие разыскиваемый альбом;
· выходные характеристики: все альбомы пригодные под данное описание.
метод:
Делаем копию входных характеристик.
Проверяем 1-ый параметр.
Находим все альбомы, которые удовлетворяют п.2 и объединяем их в огромное количество 1.
Проверяем 2-ой параметр (если такого нет, перебегаем п.10).
Находим все альбомы, которые удовлетворяют п.4 и объединяем их в огромное количество 2.
Проверяем 3-ий параметр (если такого нет, перебегаем в п.9).
Находим все альбомы, которые удовлетворяют п.6 и объединяем их в огромное количество 3.
Находим пересечение множеств 1 и 3 и записываем в огромное количество 1.
Находим пересечение множеств 1 и 2 и записываем в огромное количество 1.
Выводим огромное количество 1 на новейший лист.
Пример диалога:
Набросок 3.2.1 — вопросец «Поиск альбома по описанию»
Набросок 3.2.2 — ответ на вопросец «Поиск альбома по описанию»
Начальный текст операции:
//#Операция поиска альбома по его описанию
#include «scp_keynodes.scsy»
#include «../seb/planimetry.scsy»
procedure(search_by_param,
[[
sheet_type = «/proc/agents/shell/keynode/SCgSheet»;
sheet_title = /»Операция прошла удачно»/;
atr1 = «/proc/keynode/1_»;
atr2 = «/proc/keynode/2_»;
ui_information;
layout;
«MB_TITLE_QUERY_RESULT» = /»Результатзапроса»/;
«MB_TEXT_METKA» = /»Метка»/;
«MB_TEXT_ERROR1» = /»Неравны»/;
«MB_TEXT_ERROR2» = /»А сломалося!»/;
«Альбомы»;
«описание*»;
«тип записи*»
]],
[{
sheet,
shift,
node,
node1,
node_temp,
node_temp1,
arc,
arc1,
arc2,
attr_arc,
selected_els,
selected_els_copy,
result_set,
result_set1,
result_set2,
temp_node_with_param,
test_node,
node_param,
result,
set_albums_copy,
node_album,
set_album_param,
temp_node,
temp_set_1,
temp_set_2,
temp_set_3,
temp_set_5,
temp_set_0,
resultSet1,
resultSet2,
resultSet3,
resultSet4,
node_out_resSet2,
node_out_resSet3,
node_out_resSet4,
output_set
}],
{[
1_: in_: selected_els,
2_: in_: sheet,
3_: in_: shift
]}
)
genEl([
1_: assign_: node_: output_set
])
genEl([
1_: assign_: node_: result_set
])
genEl([
1_: assign_: node_: result_set1
])
genEl([
1_: assign_: node_: result_set2
])
//#Копия selected_els_copy входныхданных
searchSetStr3([
1_: fixed_: selected_els,
2_: assign_: const_: pos_: arc_: arc,
3_: assign_: node_: const_: node,
set3_: assign_: selected_els_copy
])
//#Выделяемодинизэлементов temp_node_with_param огромного количества selected_els_copy
searchElStr3([
1_: fixed_: selected_els_copy,
2_: assign_: arc_: pos_: const_: arc,
3_: assign_: node_: temp_node_with_param
])
//#Удаляемдугу arc проведеннуюиз selected_els_copy к temp_node
eraseEl([
1_: fixed_: arc
])
//#Делаемкопию set_albums_copy всехальбомов
searchSetStr3([
1_: fixed_: «Альбомы»,
2_: assign_: const_: pos_: arc_: arc,
3_: assign_: node_: const_: node,
set3_: assign_: set_albums_copy
])
//#Проверяем описание каких альбомов удовлетворяет узел temp_node_with_param
//#Берем один альбом node_album из огромного количества альбомов set_albums_copy
label(other_album)
searchElStr3([
1_: fixed_: set_albums_copy,
2_: assign_: arc_: pos_: const_: arc,
3_: assign_: node_: const_: node_album
],,not_other_album)
//#Удаляемдугу arc проведеннуюиз set_albums_copy к node_album
eraseEl([
1_: fixed_: arc
])
//#Найдеммножество set_album_param всехописанийальбома node_album
//#—————1_проходимпервуюпару_——————
searchSetStr5([
1_: assign_: const_: node_: node,
2_: assign_: pos_: arc_: const_: arc,
3_: fixed_: node_album,
4_: assign_: pos_: arc_: const_: arc1,
5_: fixed_:atr1,
set1_: assign_: resultSet1
])
searchSetStr3([
1_: fixed_: «описание*»,
2_: assign_: pos_: arc_: const_: arc,
3_: assign_: node,
set3_: assign_: resultSet2
])
selectYStr3([
1_: fixed_: resultSet1,
2_: assign_: const_: pos_: arc,
3_: assign_: node_ : node,
set3_: fixed_: resultSet2
])
searchElStr3([
1_: fixed_: resultSet2,
2_: assign_: const_: pos_: arc,
3_: assign_: node_ : node_out_resSet2
])
searchSetStr5([
1_: fixed_: node_out_resSet2,
2_: assign_: pos_: arc_: const_: arc,
3_: assign_: const_: node_: node,
4_: assign_: pos_: arc_: const_: arc1,
5_: fixed_:atr2,
set3_: assign_: resultSet3
])
//#—————2_проходимтройку_——————
searchElStr3([
1_: fixed_: resultSet3,
2_: assign_: const_: pos_: arc,
3_: assign_: node_ : node_out_resSet3
])
searchSetStr3([
1_: fixed_: node_out_resSet3,
2_: assign_: pos_: arc_: const_: arc,
3_: assign_: node,
set3_: assign_: resultSet4
])
//#Альбомы описываются по трем аспектам, проверяем любой из
//#—————1_Проверка по типу записи_—————
label(other_handler)
searchElStr3([
1_: fixed_: resultSet4,
2_: assign_: const_: pos_: arc,
3_: assign_: node_ : node_out_resSet4
],,other_album)
//#Удаляемдугу arc проведеннуюиз resultSet4 к node_out_resSet4
eraseEl([
1_: fixed_: arc
])
//#———Отыскиваем альбом по его введенному описанию———
searchSetStr5([
1_: assign_: const_: node_: node,
2_: assign_: pos_: arc_: const_: arc,
3_: fixed_: node_out_resSet4,
4_: assign_: pos_: arc_: const_: arc1,
5_: fixed_:atr1,
set1_: assign_: resultSet1
])
searchSetStr5([
1_: assign_: const_: node_: node,
2_: assign_: pos_: arc_: const_: arc,
3_: fixed_: temp_node_with_param,
4_: assign_: pos_: arc_: const_: arc1,
5_: fixed_:atr2,
set1_: assign_: resultSet2
])
selectYStr3([
1_: fixed_: resultSet1,
2_: assign_: const_: pos_: arc,
3_: assign_: node_ : node,
set3_: fixed_: resultSet2
],,other_handler)
genElStr3([
1_: fixed_: result_set,
2_: assign_: const_: pos_: arc,
3_: fixed_: node_album
],other_album,)
label(not_other_album)
////////////////////////////////////////////////////////////////////////
////
//#Выделяемодинизэлементов temp_node_with_param огромного количества selected_els_copy
searchElStr3([
1_: fixed_: selected_els_copy,
2_: assign_: arc_: pos_: const_: arc,
3_: assign_: node_: temp_node_with_param
],,output)
//#Удаляемдугу arc проведеннуюиз selected_els_copy к temp_node
eraseEl([
1_: fixed_: arc
])
//#Делаемкопию set_albums_copy всехальбомов
searchSetStr3([
1_: fixed_: «Альбомы»,
2_: assign_: const_: pos_: arc_: arc,
3_: assign_: node_: const_: node,
set3_: assign_: set_albums_copy
])
//#Проверяем описание каких альбомов удовлетворяет узел temp_node_with_param
//#Берем один альбом node_album из огромного количества альбомов set_albums_copy
label(other_album1)
searchElStr3([
1_: fixed_: set_albums_copy,
2_: assign_: arc_: pos_: const_: arc,
3_: assign_: node_: const_: node_album
],,not_other_album1)
//#Удаляемдугу arc проведеннуюиз set_albums_copy к node_album
eraseEl([
1_: fixed_: arc
])
//#Найдеммножество set_album_param всехописанийальбома node_album
//#—————1_проходимпервуюпару_——————
searchSetStr5([
1_: assign_: const_: node_: node,
2_: assign_: pos_: arc_: const_: arc,
3_: fixed_: node_album,
4_: assign_: pos_: arc_: const_: arc1,
5_: fixed_:atr1,
set1_: assign_: resultSet1
])
searchSetStr3([
1_: fixed_: «описание*»,
2_: assign_: pos_: arc_: const_: arc,
3_: assign_: node,
set3_: assign_: resultSet2
])
selectYStr3([
1_: fixed_: resultSet1,
2_: assign_: const_: pos_: arc,
3_: assign_: node_ : node,
set3_: fixed_: resultSet2
])
searchElStr3([
1_: fixed_: resultSet2,
2_: assign_: const_: pos_: arc,
3_: assign_: node_ : node_out_resSet2
])
searchSetStr5([
1_: fixed_: node_out_resSet2,
2_: assign_: pos_: arc_: const_: arc,
3_: assign_: const_: node_: node,
4_: assign_: pos_: arc_: const_: arc1,
5_: fixed_:atr2,
set3_: assign_: resultSet3
])
//#—————2_проходимтройку_——————
searchElStr3([
1_: fixed_: resultSet3,
2_: assign_: const_: pos_: arc,
3_: assign_: node_ : node_out_resSet3
])
searchSetStr3([
1_: fixed_: node_out_resSet3,
2_: assign_: pos_: arc_: const_: arc,
3_: assign_: node,
set3_: assign_: resultSet4
])
//#Альбомы описываются по трем аспектам, проверяем любой из
//#—————1_Проверка по типу записи_—————
label(other_handler1)
searchElStr3([
1_: fixed_: resultSet4,
2_: assign_: const_: pos_: arc,
3_: assign_: node_ : node_out_resSet4
],,other_album1)
//#Удаляемдугу arc проведеннуюиз resultSet4 к node_out_resSet4
eraseEl([
1_: fixed_: arc
])
//#———Отыскиваем альбом по его введенному описанию———
searchSetStr5([
1_: assign_: const_: node_: node,
2_: assign_: pos_: arc_: const_: arc,
3_: fixed_: node_out_resSet4,
4_: assign_: pos_: arc_: const_: arc1,
5_: fixed_:atr1,
set1_: assign_: resultSet1
])
searchSetStr5([
1_: assign_: const_: node_: node,
2_: assign_: pos_: arc_: const_: arc,
3_: fixed_: temp_node_with_param,
4_: assign_: pos_: arc_: const_: arc1,
5_: fixed_:atr2,
set1_: assign_: resultSet2
])
selectYStr3([
1_: fixed_: resultSet1,
2_: assign_: const_: pos_: arc,
3_: assign_: node_ : node,
set3_: fixed_: resultSet2
],,other_handler1)
genElStr3([
1_: fixed_: result_set1,
2_: assign_: const_: pos_: arc,
3_: fixed_: node_album
],other_album1,)
////////////////////////////////////////////////////////////////////////
label(not_other_album1)
////////////////////////////////////////////////////////////////////////
//
//#Выделяемодинизэлементов temp_node_with_param огромного количества selected_els_copy
searchElStr3([
1_: fixed_: selected_els_copy,
2_: assign_: arc_: pos_: const_: arc,
3_: assign_: node_: temp_node_with_param
],,output)
//#Удаляемдугу arc проведеннуюиз selected_els_copy к temp_node
eraseEl([
1_: fixed_: arc
])
//#Делаемкопию set_albums_copy всехальбомов
searchSetStr3([
1_: fixed_: «Альбомы»,
2_: assign_: const_: pos_: arc_: arc,
3_: assign_: node_: const_: node,
set3_: assign_: set_albums_copy
])
//#Проверяем описание каких альбомов удовлетворяет узел temp_node_with_param
//#Берем один альбом node_album из огромного количества альбомов set_albums_copy
label(other_album2)
searchElStr3([
1_: fixed_: set_albums_copy,
2_: assign_: arc_: pos_: const_: arc,
3_: assign_: node_: const_: node_album
],,not_other_album2)
//#Удаляемдугу arc проведеннуюиз set_albums_copy к node_album
eraseEl([
1_: fixed_: arc
])
//#Найдеммножество set_album_param всехописанийальбома node_album
//#—————1_проходимпервуюпару_——————
searchSetStr5([
1_: assign_: const_: node_: node,
2_: assign_: pos_: arc_: const_: arc,
3_: fixed_: node_album,
4_: assign_: pos_: arc_: const_: arc1,
5_: fixed_:atr1,
set1_: assign_: resultSet1
])
searchSetStr3([
1_: fixed_: «описание*»,
2_: assign_: pos_: arc_: const_: arc,
3_: assign_: node,
set3_: assign_: resultSet2
])
selectYStr3([
1_: fixed_: resultSet1,
2_: assign_: const_: pos_: arc,
3_: assign_: node_ : node,
set3_: fixed_: resultSet2
])
searchElStr3([
1_: fixed_: resultSet2,
2_: assign_: const_: pos_: arc,
3_: assign_: node_ : node_out_resSet2
])
searchSetStr5([
1_: fixed_: node_out_resSet2,
2_: assign_: pos_: arc_: const_: arc,
3_: assign_: const_: node_: node,
4_: assign_: pos_: arc_: const_: arc1,
5_: fixed_:atr2,
set3_: assign_: resultSet3
])
//#—————2_проходимтройку_——————
searchElStr3([
1_: fixed_: resultSet3,
2_: assign_: const_: pos_: arc,
3_: assign_: node_ : node_out_resSet3
])
searchSetStr3([
1_: fixed_: node_out_resSet3,
2_: assign_: pos_: arc_: const_: arc,
3_: assign_: node,
set3_: assign_: resultSet4
])
//#Альбомы описываются по трем аспектам, проверяем любой из
//#—————1_Проверка по типу записи_—————
label(other_handler2)
searchElStr3([
1_: fixed_: resultSet4,
2_: assign_: const_: pos_: arc,
3_: assign_: node_ : node_out_resSet4
],,other_album2)
//#Удаляемдугу arc проведеннуюиз resultSet4 к node_out_resSet4
eraseEl([
1_: fixed_: arc
])
//#———Отыскиваем альбом по его введенному описанию———
searchSetStr5([
1_: assign_: const_: node_: node,
2_: assign_: pos_: arc_: const_: arc,
3_: fixed_: node_out_resSet4,
4_: assign_: pos_: arc_: const_: arc1,
5_: fixed_:atr1,
set1_: assign_: resultSet1
])
searchSetStr5([
1_: assign_: const_: node_: node,
2_: assign_: pos_: arc_: const_: arc,
3_: fixed_: temp_node_with_param,
4_: assign_: pos_: arc_: const_: arc1,
5_: fixed_:atr2,
set1_: assign_: resultSet2
])
selectYStr3([
1_: fixed_: resultSet1,
2_: assign_: const_: pos_: arc,
3_: assign_: node_ : node,
set3_: fixed_: resultSet2
],,other_handler2)
genElStr3([
1_: fixed_: result_set2,
2_: assign_: const_: pos_: arc,
3_: fixed_: node_album
],other_album2,)
////////////////////////////////////////////////////////////////////////
label(not_other_album2)
//////////////////////////
label(output)
////////////////////////////////////////////////////////////////////////
searchSetStr3([
1_: fixed_: result_set,
2_: assign_: const_: pos_: arc_: arc,
3_: assign_: node_: const_: node,
set3_: fixed_: output_set
])
//#Проверим является ли огромное количество result_set1 пустым
searchElStr3([
1_: fixed_: result_set1,
2_: assign_: const_: pos_: arc,
3_: assign_: node_ : node
],,out)
selectYStr3([
1_: fixed_: result_set1,
2_: assign_: const_: pos_: arc,
3_: assign_: node_ : node,
set3_: fixed_: output_set
])
//#Проверим является ли огромное количество result_set2 пустым
searchElStr3([
1_: fixed_: result_set2,
2_: assign_: const_: pos_: arc,
3_: assign_: node_ : node
],,out)
selectYStr3([
1_: fixed_: result_set2,
2_: assign_: const_: pos_: arc,
3_: assign_: node_ : node,
set3_: fixed_: output_set
])
////////////////////////////////////////////////////////////////////////
label(out)
ui_sheet_create([
1_: assign_: sheet,
2_: fixed_: sheet_type,
3_: fixed_: sheet_title,
4_: fixed_: layout
])
ui_output([1_: fixed_: sheet, 2_: fixed_: output_set])
return()
end
поискальбомапотипузаписи (файл search_by_type.m4scp)
входные характеристики: узел, содержащий тип записи;
выходные характеристики: все альбомы с данным типом записи.
Пример диалога:
Набросок 3.2.3 — вопросец «Поиск альбома по типу записи»
Набросок 3.2.4 — ответ на вопросец «Поиск альбома по типу записи»
метод:
Делаем копию входных характеристик.
Находим все узлы альбомов, пригодные под введенное описание и записываем их в огромное количество 1.
Выводим на новейший лист огромное количество 1.
Начальный текст операции:
//#Операция поиска альбома по его описанию
#include «scp_keynodes.scsy»
#include «../seb/planimetry.scsy»
procedure(search_by_type,
[[
sheet_type = «/proc/agents/shell/keynode/SCgSheet»;
sheet_title = /»Операция прошла удачно»/;
atr1 = «/proc/keynode/1_»;
atr2 = «/proc/keynode/2_»;
ui_information;
layout;
«MB_TITLE_QUERY_RESULT» = /»Результатзапроса»/;
«MB_TEXT_METKA» = /»Метка»/;
«MB_TEXT_ERROR1» = /»Неравны»/;
«MB_TEXT_ERROR2» = /»А сломалося!»/;
«Альбомы»;
«описание*»;
«тип записи*»
]],
[{
sheet,
shift,
node,
node1,
node_temp,
node_temp1,
arc,
arc1,
arc2,
attr_arc,
selected_els,
selected_els_copy,
result_set,
temp_node_with_param,
test_node,
node_param,
result,
set_albums_copy,
node_album,
set_album_param,
temp_node,
temp_set_1,
temp_set_2,
temp_set_3,
temp_set_5,
temp_set_0,
resultSet1,
resultSet2,
resultSet3,
resultSet4,
node_out_resSet2,
node_out_resSet3,
node_out_resSet4
}],
{[
1_: in_: selected_els,
2_: in_: sheet,
3_: in_: shift
]}
)
genEl([
1_: assign_: node_: result_set
])
//#Копия selected_els_copy входныхданных
searchSetStr3([
1_: fixed_: selected_els,
2_: assign_: const_: pos_: arc_: arc,
3_: assign_: node_: const_: node,
set3_: assign_: selected_els_copy
])
//#Выделяемодинизэлементов temp_node_with_param огромного количества selected_els_copy
searchElStr3([
1_: fixed_: selected_els_copy,
2_: assign_: arc_: pos_: const_: arc,
3_: assign_: node_: temp_node_with_param
])
//#Удаляемдугу arc проведеннуюиз selected_els_copy к temp_node
eraseEl([
1_: fixed_: arc
])
//#Делаемкопию set_albums_copy всехальбомов
searchSetStr3([
1_: fixed_: «Альбомы»,
2_: assign_: const_: pos_: arc_: arc,
3_: assign_: node_: const_: node,
set3_: assign_: set_albums_copy
])
//#Проверяем описание каких альбомов удовлетворяет узел temp_node_with_param
//#Берем один альбом node_album из огромного количества альбомов set_albums_copy
label(other_album)
searchElStr3([
1_: fixed_: set_albums_copy,
2_: assign_: arc_: pos_: const_: arc,
3_: assign_: node_: const_: node_album
],,not_other_album)
//#Удаляемдугу arc проведеннуюиз set_albums_copy к node_album
eraseEl([
1_: fixed_: arc
])
//#Найдеммножество set_album_param всехописанийальбома node_album
//#—————1_проходимпервуюпару_——————
searchSetStr5([
1_: assign_: const_: node_: node,
2_: assign_: pos_: arc_: const_: arc,
3_: fixed_: node_album,
4_: assign_: pos_: arc_: const_: arc1,
5_: fixed_:atr1,
set1_: assign_: resultSet1
])
searchSetStr3([
1_: fixed_: «описание*»,
2_: assign_: pos_: arc_: const_: arc,
3_: assign_: node,
set3_: assign_: resultSet2
])
selectYStr3([
1_: fixed_: resultSet1,
2_: assign_: const_: pos_: arc,
3_: assign_: node_ : node,
set3_: fixed_: resultSet2
])
searchElStr3([
1_: fixed_: resultSet2,
2_: assign_: const_: pos_: arc,
3_: assign_: node_ : node_out_resSet2
])
searchSetStr5([
1_: fixed_: node_out_resSet2,
2_: assign_: pos_: arc_: const_: arc,
3_: assign_: const_: node_: node,
4_: assign_: pos_: arc_: const_: arc1,
5_: fixed_:atr2,
set3_: assign_: resultSet3
])
//#—————2_проходимтройку_——————
searchElStr3([
1_: fixed_: resultSet3,
2_: assign_: const_: pos_: arc,
3_: assign_: node_ : node_out_resSet3
])
searchSetStr3([
1_: fixed_: node_out_resSet3,
2_: assign_: pos_: arc_: const_: arc,
3_: assign_: node,
set3_: assign_: resultSet4
])
//#Альбомы описываются по трем аспектам, проверяем любой из
//#—————1_Проверка по типу записи_—————
label(other_handler)
searchElStr3([
1_: fixed_: resultSet4,
2_: assign_: const_: pos_: arc,
3_: assign_: node_ : node_out_resSet4
],,other_album)
//#Удаляемдугу arc проведеннуюиз resultSet4 к node_out_resSet4
eraseEl([
1_: fixed_: arc
])
//#———
searchSetStr5([
1_: assign_: const_: node_: node,
2_: assign_: pos_: arc_: const_: arc,
3_: fixed_: node_out_resSet4,
4_: assign_: pos_: arc_: const_: arc1,
5_: fixed_:atr1,
set1_: assign_: resultSet1
])
searchSetStr3([
1_: fixed_: «типзаписи*»,
2_: assign_: pos_: arc_: const_: arc,
3_: assign_: node,
set3_: assign_: resultSet2
])
selectYStr3([
1_: fixed_: resultSet1,
2_: assign_: const_: pos_: arc,
3_: assign_: node_ : node,
set3_: fixed_: resultSet2
],,other_handler)
searchElStr3([
1_: fixed_: resultSet2,
2_: assign_: const_: pos_: arc,
3_: assign_: node_ : node_out_resSet2
])
searchSetStr5([
1_: fixed_: node_out_resSet2,
2_: assign_: pos_: arc_: const_: arc,
3_: assign_: const_: node_: node,
4_: assign_: pos_: arc_: const_: arc1,
5_: fixed_:atr2,
set3_: assign_: resultSet3
])
//#———_Выделяем одно из описаний типа записи node_param_———-
searchElStr3([
1_: fixed_: resultSet3,
2_: assign_: const_: pos_: arc,
3_: assign_: node_ : node_param
])
//#———_Проверка равенства отысканного описания и введенного пользователем_——
ifCoin([
1_: fixed_: node_param,
2_: fixed_: temp_node_with_param
],,other_album)
//#———_Если альбом удовлетворяет условию, то заносим его в result_set_——-
genElStr3([
1_: fixed_: result_set,
2_: assign_: const_: pos_: arc,
3_: fixed_: node_album
],other_album,other_album,other_album)
label(not_other_album)
ui_sheet_create([
1_: assign_: sheet,
2_: fixed_: sheet_type,
3_: fixed_: sheet_title,
4_: fixed_: layout
])
ui_output([1_: fixed_: sheet, 2_: fixed_: result_set])
return()
end
сопоставление альбомов (файл ass.m4scp)
входные характеристики: альбомы для сопоставления;
выходные характеристики: общие свойства для сравниваемых альбом.
Пример диалога:
Набросок 3.1.5 — вопросец «Поиск альбома по типу записи»
Набросок 3.1.6 — ответ на вопросец «Поиск альбома по типу записи»
метод:
Делаем копию входных данных.
Находим все характеристики описания для первого альбома и записываем в огромное количество 1.
Находим все характеристики описания для второго альбома и записываем в огромное количество 2.
Находим пересечение множеств 1 и 2, записываем итог в огромное количество 1.
Выводим на новейший лист огромное количество 1.
Начальный текст операции:
//#Операция общее меж 2-мя альбомами
#include «scp_keynodes.scsy»
#include «../seb/planimetry.scsy»
procedure(ass,
[[
sheet_type = «/proc/agents/shell/keynode/SCgSheet»;
sheet_title = /»Операция прошла удачно»/;
atr1 = «/proc/keynode/1_»;
atr2 = «/proc/keynode/2_»;
ui_information;
layout;
«MB_TITLE_QUERY_RESULT» = /»Результатзапроса»/;
«MB_TEXT_METKA» = /»Метка»/;
«MB_TEXT_ERROR1» = /»Неравны»/;
«MB_TEXT_ERROR2» = /»А сломалося!»/;
«Альбомы»;
«описание*»;
«тип записи*»
]],
[{
sheet,
shift,
node,
node1,
node_temp,
node_temp1,
arc,
arc1,
arc2,
attr_arc,
selected_els,
selected_els_copy,
result_set,
result_set1,
result_set2,
temp_node_with_param,
test_node,
node_param,
result,
set_albums_copy,
node_album,
set_album_param,
temp_node,
temp_set_1,
temp_set_2,
temp_set_3,
temp_set_5,
temp_set_0,
resultSet1,
resultSet2,
resultSet3,
resultSet4,
node_out_resSet2,
node_out_resSet3,
node_out_resSet4,
output_set,
set1,
set2,
set3,
set4,
node_in,
node_to_result_set1,
node_to_result_set2,
node_out,
node_to_description,
node_start_descr,
set_with_node_start_descrp,
node_to_result,
set_album1,
set_album2
}],
{[
1_: in_: selected_els,
2_: in_: sheet,
3_: in_: shift
]}
)
genEl([
1_: assign_: node_: output_set
])
genEl([
1_: assign_: node_: result_set
])
genEl([
1_: assign_: node_: result_set1
])
genEl([
1_: assign_: node_: result_set2
])
genEl([
1_: assign_: node_: result
])
genEl([
1_: assign_: node_: set_album1
])
genEl([
1_: assign_: node_: set_album2
])
//#Копия selected_els_copy входныхданных
searchSetStr3([
1_: fixed_: selected_els,
2_: assign_: const_: pos_: arc_: arc,
3_: assign_: node_: const_: node,
set3_: assign_: selected_els_copy
])
//#Выделяемодинизэлементов temp_node_with_param огромного количества selected_els_copy
searchElStr3([
1_: fixed_: selected_els_copy,
2_: assign_: arc_: pos_: const_: arc,
3_: assign_: node_: node_album
])
//#Удаляемдугу arc проведеннуюиз selected_els_copy к temp_node
eraseEl([
1_: fixed_: arc
])
//#Найдеммножество set_album_param всехописанийальбома node_album
//#—————1_проходимпервуюпару_——————
searchSetStr5([
1_: assign_: const_: node_: node,
2_: assign_: pos_: arc_: const_: arc,
3_: fixed_: node_album,
4_: assign_: pos_: arc_: const_: arc1,
5_: fixed_:atr1,
set1_: assign_: resultSet1
])
searchSetStr3([
1_: fixed_: «описание*»,
2_: assign_: pos_: arc_: const_: arc,
3_: assign_: node,
set3_: assign_: resultSet2
])
selectYStr3([
1_: fixed_: resultSet1,
2_: assign_: const_: pos_: arc,
3_: assign_: node_ : node,
set3_: fixed_: resultSet2
])
searchElStr3([
1_: fixed_: resultSet2,
2_: assign_: const_: pos_: arc,
3_: assign_: node_ : node_out_resSet2
])
searchElStr5([
1_: fixed_: node_out_resSet2,
2_: assign_: pos_: arc_: const_: arc,
3_: assign_: const_: node_: node_to_description,
4_: assign_: pos_: arc_: const_: arc1,
5_: fixed_:atr2,
])
//#—————2_проходимтройку_——————
searchSetStr3([
1_: fixed_: node_to_description,
2_: assign_: const_: pos_: arc,
3_: assign_: node_ : node_start_descr,
set3_: assign_: set_with_node_start_descrp
])
//#—————_Записываем все характеристики в сеты для всякого альбома—————-
label(next_descrp)
searchElStr3([
1_: fixed_: set_with_node_start_descrp,
2_: assign_: arc,
3_: assign_: node_in
],,next_album)
//#—-_ydalili dugu k yzly_—
eraseEl([
1_: fixed_: arc
])
//#———_Пройдемпятерочку_—-
searchElStr5([
1_: assign_: node_out,
2_: assign_: pos_: arc_: const_: arc,
3_: fixed_: node_in,
4_: assign_: pos_: arc_: const_: arc1,
5_: fixed_: atr1
])
searchElStr5([
1_: fixed_: node_out,
2_: assign_: pos_: arc_: const_: arc,
3_: assign_: node_to_result,
4_: assign_: pos_: arc_: const_: arc1,
5_: fixed_: atr2
])
genElStr3([
1_: fixed_: set_album1,
2_: assign_: arc_: arc,
3_: fixed_: node_to_result
],next_descrp,)
//#——_povtaryaem vse dlya vtorogo alboma_———
label(next_album)
//#Выделяемодинизэлементов temp_node_with_param огромного количества selected_els_copy
searchElStr3([
1_: fixed_: selected_els_copy,
2_: assign_: arc_: pos_: const_: arc,
3_: assign_: node_: node_album
])
//#Удаляемдугу arc проведеннуюиз selected_els_copy к temp_node
eraseEl([
1_: fixed_: arc
])
//#Найдеммножество set_album_param всехописанийальбома node_album
//#—————1_проходимпервуюпару_——————
searchSetStr5([
1_: assign_: const_: node_: node,
2_: assign_: pos_: arc_: const_: arc,
3_: fixed_: node_album,
4_: assign_: pos_: arc_: const_: arc1,
5_: fixed_:atr1,
set1_: assign_: resultSet1
])
searchSetStr3([
1_: fixed_: «описание*»,
2_: assign_: pos_: arc_: const_: arc,
3_: assign_: node,
set3_: assign_: resultSet2
])
selectYStr3([
1_: fixed_: resultSet1,
2_: assign_: const_: pos_: arc,
3_: assign_: node_ : node,
set3_: fixed_: resultSet2
])
searchElStr3([
1_: fixed_: resultSet2,
2_: assign_: const_: pos_: arc,
3_: assign_: node_ : node_out_resSet2
])
searchElStr5([
1_: fixed_: node_out_resSet2,
2_: assign_: pos_: arc_: const_: arc,
3_: assign_: const_: node_: node_to_description,
4_: assign_: pos_: arc_: const_: arc1,
5_: fixed_:atr2,
])
//#—————2_проходимтройку_——————
searchSetStr3([
1_: fixed_: node_to_description,
2_: assign_: const_: pos_: arc,
3_: assign_: node_ : node_start_descr,
set3_: assign_: set_with_node_start_descrp
])
//#—————_Записываем все характеристики в сеты для всякого альбома—————-
label(next_descrp2)
searchElStr3([
1_: fixed_: set_with_node_start_descrp,
2_: assign_: arc,
3_: assign_: node_in
],,out)
//#—-_ydalili dugu k yzly_—
eraseEl([
1_: fixed_: arc
])
//#———_Пройдемпятерочку_—-
searchElStr5([
1_: assign_: node_out,
2_: assign_: pos_: arc_: const_: arc,
3_: fixed_: node_in,
4_: assign_: pos_: arc_: const_: arc1,
5_: fixed_: atr1
])
searchElStr5([
1_: fixed_: node_out,
2_: assign_: pos_: arc_: const_: arc,
3_: assign_: node_to_result,
4_: assign_: pos_: arc_: const_: arc1,
5_: fixed_: atr2
])
genElStr3([
1_: fixed_: set_album2,
2_: assign_: arc_: arc,
3_: fixed_: node_to_result
],next_descrp2,)
label(out)
//#———_Naxodim obschie elementy_———
selectYStr3([
1_: fixed_: set_album2,
2_: assign_: const_: pos_: arc,
3_: assign_: node_ : node,
set3_: fixed_: set_album1
])
//#———_Вывод_——-
ui_sheet_create([
1_: assign_: sheet,
2_: fixed_: sheet_type,
3_: fixed_: sheet_title,
4_: fixed_: layout
])
ui_output([1_: fixed_: sheet, 2_: fixed_: set_album1])
return()
end
поиск года основания исполнителя (файл year_of_foundation.m4scp)
входные характеристики: узел, содержащий заглавие исполнителя;
выходные характеристики: год основания исполнителя.
Пример диалога:
Набросок 3.2.6 — вопросец год основания исполнителя
метод:
Делаем копию входных характеристик.
Отыскиваем год основания исполнителя.
Формируем результирующее огромное количество.
Начальный текст операции:
//#Операция получения года основания избранного исполнителя
#include «scp_keynodes.scsy»
#include «../seb/planimetry.scsy»
procedure(year_of_foundation,
[[
sheet_type = «/proc/agents/shell/keynode/SCgSheet»;
sheet_title = /»Операция прошла удачно»/;
atr1 = «/proc/keynode/1_»;
atr2 = «/proc/keynode/2_»;
ui_information;
layout;
«MB_TITLE_QUERY_RESULT» = /»Результатзапроса»/;
«MB_TEXT_METKA» = /»Метка»/;
sall = «/etc/im_keynode/get_year»;
cmd = «/operation/ui_io_exec_command_par/exec_command_par»;
beg = /»…!!year_of_found_performer!!..n»/;
«описание*»;
«год основания*»;
«Исполнители»
]],
[{
sheet,
shift,
node,
node1,
node2,
node3,
node4,
node5,
performer,
arc,
arc1,
arc2,
arc3,
selected_els,
selected_els_copy,
set,
set1,
set2,
set3,
set4,
result_set,
output_set,
out,
descr
}],
{[
1_: in_: selected_els,
2_: in_: sheet,
3_: in_: shift
]}
)
//#Копия selected_els_copy входныхданных
searchSetStr3([
1_: fixed_: selected_els,
2_: assign_: const_: pos_: arc_: arc,
3_: assign_: node_: const_: node,
set3_: assign_: selected_els_copy
])
label(other_copy)
//#Выделяемодинизэлементов performer огромного количества selected_els_copy
searchElStr3([
1_: fixed_: selected_els_copy,
2_: assign_: const_: arc,
3_: assign_: const_: performer
])
//#Удаляемдугу arc проведеннуюиз selected_els_copy к performer
eraseEl([
1_: fixed_: arc
])
//#Проходим первую пятерку пары
searchSetStr5([
1_: assign_: const_: node1,
2_: assign_: const_: arc1,
3_: fixed_: performer,
4_: assign_: const_: arc2,
5_: fixed_: atr1,
set1_: assign_: set
],,other_copy,other_copy)
//#Под отношением описание*
searchSetStr3([
1_: fixed_: «описание*»,
2_: assign_: const_: arc,
3_: assign_: const_: node,
set3_: assign_: set1
])
//#Находим пересечение множеств set и set1
selectYStr3([
1_: fixed_: set1,
2_: assign_: const_: arc3,
3_: assign_: node_ : node2,
set3_: fixed_: set
],,other_copy,other_copy)
searchElStr3([
1_: fixed_: set,
2_: assign_: const_: arc,
3_: assign_: const_: node3
])
//#Проходим вторую пятерку пары
searchSetStr5([
1_: fixed_: node3,
2_: assign_: const_: arc1,
3_: assign_: node4,
4_: assign_: const_: arc2,
5_: fixed_: atr2,
set3_: assign_: set2
],,other_copy,other_copy)
searchElStr3([
1_: fixed_: set2,
2_: assign_: const_: arc,
3_: assign_: const_: node1
])
//#Проходимтройку
searchSetStr3([
1_: fixed_: node1,
2_: assign_: const_: arc,
3_: assign_: const_: node,
set3_: assign_: set
])
label(other_node)
searchElStr3([
1_: fixed_: set,
2_: assign_: const_: arc,
3_: assign_: const_: node5
])
//#Удаляемдугу arc
eraseEl([
1_: fixed_: arc
])
//#Проходим первую пятерку 2-ой пары
searchSetStr5([
1_: assign_: const_: node1,
2_: assign_: const_: arc1,
3_: fixed_: node5,
4_: assign_: const_: arc2,
5_: fixed_: atr1,
set1_: assign_: set3
],,other_node,other_node)
//#Под отношением год основания*
searchSetStr3([
1_: fixed_: «годоснования*»,
2_: assign_: const_: arc,
3_: assign_: const_: node,
set3_: assign_: set4
])
//#Находим пересечение множеств set3 и set4
selectYStr3([
1_: fixed_: set4,
2_: assign_: const_: arc3,
3_: assign_: node_ : node2,
set3_: fixed_: set3
],,other_node,other_node)
searchElStr3([
1_: fixed_: set3,
2_: assign_: const_: arc,
3_: assign_: const_: node3
])
//#Проходим вторую пятерку 2-ой пары
searchSetStr5([
1_: fixed_: node3,
2_: assign_: const_: arc1,
3_: assign_: const_: node5,
4_: assign_: const_: arc2,
5_: fixed_: atr2,
set3_: assign_: out
])
printNl([1_: fixed_: beg])
callReturn([1_: fixed_: cmd,
2_: fixed_:{[
1_: out,
2_: sheet,
3_: sall
]}
], descr)
return()
end
поиск композиции по рейтингу (файл search_by_rating.m4scp)
входные характеристики: узел, содержащий заглавие исполнителя;
выходные характеристики: год основания исполнителя.
Пример диалога:
Набросок 3.2.7 — вопросец композиции с избранным рейтингом
метод:
Делаем копию входных характеристик.
Отыскиваем композиции по рейтингу.
Формируем результирующее огромное количество.
Начальный текст операции:
//#Операция получения страны избранного исполнителя
#include «scp_keynodes.scsy»
#include «../seb/planimetry.scsy»
procedure(search_by_rating,
[[
sheet_type = «/proc/agents/shell/keynode/SCgSheet»;
sheet_title = /»Операция прошла удачно»/;
atr1 = «/proc/keynode/1_»;
atr2 = «/proc/keynode/2_»;
ui_information;
layout;
«MB_TITLE_QUERY_RESULT» = /»Результатзапроса»/;
«MB_TEXT_METKA» = /»Метка»/;
sall = «/etc/im_keynode/get_search_rating»;
cmd = «/operation/ui_io_exec_command_par/exec_command_par»;
beg = /»…!!search_by_rating!!..n»/;
«описание*»;
«пространство в чарте*»;
«Исполнители»
]],
[{
sheet,
shift,
node,
node1,
node2,
node3,
node4,
node5,
node6,
performer,
arc,
arc1,
arc2,
arc3,
selected_els,
selected_els_copy,
output_set,
set,
set1,
set2,
set3,
set4,
set_bean,
out,
descr
}],
{[
1_: in_: selected_els,
2_: in_: sheet,
3_: in_: shift
]}
)
genEl([
1_: assign_: node_: out
])
//#Копия selected_els_copy входныхданных
searchSetStr3([
1_: fixed_: selected_els,
2_: assign_: const_: pos_: arc_: arc,
3_: assign_: node_: const_: node,
set3_: assign_: selected_els_copy
])
label(other_copy)
//#Выделяемодинизэлементов performer огромного количества selected_els_copy
searchElStr3([
1_: fixed_: selected_els_copy,
2_: assign_: const_: arc,
3_: assign_: const_: performer
])
//#Удаляемдугу arc проведеннуюиз selected_els_copy к performer
eraseEl([
1_: fixed_: arc
])
//#Проходим первую пятерку пары
searchSetStr5([
1_: assign_: const_: node1,
2_: assign_: const_: arc1,
3_: fixed_: performer,
4_: assign_: const_: arc2,
5_: fixed_: atr2,
set1_: assign_: set_bean
],,other_copy,other_copy)
//#Под отношением пространство в чарте*
searchSetStr3([
1_: fixed_: «местовчарте*»,
2_: assign_: const_: arc,
3_: assign_: const_: node,
set3_: assign_: set1
])
//#Находим пересечение множеств set и set1
selectYStr3([
1_: fixed_: set1,
2_: assign_: const_: arc3,
3_: assign_: node_ : node2,
set3_: fixed_: set_bean
],,other_copy,other_copy)
label(other_bean)
//#Выделяем один из частей
searchElStr3([
1_: fixed_: set_bean,
2_: assign_: const_: arc,
3_: assign_: const_: node6
],,to_end,to_end)
//#Удаляем дугу arc проведенную
eraseEl([
1_: fixed_: arc
])
searchSetStr5([
1_: fixed_: node6,
2_: assign_: const_: arc1,
3_: assign_: const_: node5,
4_: assign_: const_: arc2,
5_: fixed_: atr1,
set3_: fixed_: out
],other_bean)
label(to_end)
printNl([1_: fixed_: beg])
callReturn([1_: fixed_: cmd,
2_: fixed_:{[
1_: out,
2_: sheet,
3_: sall
]}
], descr)
return()
end
поисккомпозициипорейтингу (файл search_by_rating.m4scp)
входные характеристики: узел, содержащий заглавие альбома;
выходные характеристики: обложка альбома.
Пример диалога:
Набросок 3.2.8 — вопросец композиции с избранным рейтингом
метод:
Делаем копию входных характеристик.
Отыскиваем композиции по рейтингу.
Формируем результирующее огромное количество.
Начальный текст операции:
//#Операция поиска альбома по его описанию
#include «scp_keynodes.scsy»
#include «../seb/planimetry.scsy»
procedure(search_by_param,
[[
sheet_type = «/proc/agents/shell/keynode/SCgSheet»;
sheet_title = /»Операция прошла удачно»/;
atr1 = «/proc/keynode/1_»;
atr2 = «/proc/keynode/2_»;
ui_information;
layout;
«MB_TITLE_QUERY_RESULT» = /»Результатзапроса»/;
«MB_TEXT_METKA» = /»Метка»/;
«MB_TEXT_ERROR1» = /»Неравны»/;
«MB_TEXT_ERROR2» = /»А сломалося!»/;
«Альбомы»;
«описание*»;
«тип записи*»
]],
[{
sheet,
shift,
node,
node1,
node_temp,
node_temp1,
arc,
arc1,
arc2,
attr_arc,
selected_els,
selected_els_copy,
result_set,
result_set1,
result_set2,
temp_node_with_param,
test_node,
node_param,
result,
set_albums_copy,
node_album,
set_album_param,
temp_node,
temp_set_1,
temp_set_2,
temp_set_3,
temp_set_5,
temp_set_0,
resultSet1,
resultSet2,
resultSet3,
resultSet4,
node_out_resSet2,
node_out_resSet3,
node_out_resSet4,
output_set
}],
{[
1_: in_: selected_els,
2_: in_: sheet,
3_: in_: shift
]}
)
genEl([
1_: assign_: node_: output_set
])
genEl([
1_: assign_: node_: result_set
])
genEl([
1_: assign_: node_: result_set1
])
genEl([
1_: assign_: node_: result_set2
])
//#Копия selected_els_copy входныхданных
searchSetStr3([
1_: fixed_: selected_els,
2_: assign_: const_: pos_: arc_: arc,
3_: assign_: node_: const_: node,
set3_: assign_: selected_els_copy
])
//#Выделяемодинизэлементов temp_node_with_param огромного количества selected_els_copy
searchElStr3([
1_: fixed_: selected_els_copy,
2_: assign_: arc_: pos_: const_: arc,
3_: assign_: node_: temp_node_with_param
])
//#Удаляемдугу arc проведеннуюиз selected_els_copy к temp_node
eraseEl([
1_: fixed_: arc
])
//#Делаем копию set_albums_copyвсех альбомов
searchSetStr3([
1_: fixed_: «Альбомы»,
2_: assign_: const_: pos_: arc_: arc,
3_: assign_: node_: const_: node,
set3_: assign_: set_albums_copy
])
//#Проверяем описание каких альбомов удовлетворяет узел temp_node_with_param
//#Берем один альбом node_album из огромного количества альбомов set_albums_copy
label(other_album)
searchElStr3([
1_: fixed_: set_albums_copy,
2_: assign_: arc_: pos_: const_: arc,
3_: assign_: node_: const_: node_album
],,not_other_album)
//#Удаляемдугу arc проведеннуюиз set_albums_copy к node_album
eraseEl([
1_: fixed_: arc
])
//#Найдем огромное количество set_album_paramвсех описаний альбома node_album
//#—————1_проходимпервуюпару_——————
searchSetStr5([
1_: assign_: const_: node_: node,
2_: assign_: pos_: arc_: const_: arc,
3_: fixed_: node_album,
4_: assign_: pos_: arc_: const_: arc1,
5_: fixed_:atr1,
set1_: assign_: resultSet1
])
searchSetStr3([
1_: fixed_: «описание*»,
2_: assign_: pos_: arc_: const_: arc,
3_: assign_: node,
set3_: assign_: resultSet2
])
selectYStr3([
1_: fixed_: resultSet1,
2_: assign_: const_: pos_: arc,
3_: assign_: node_ : node,
set3_: fixed_: resultSet2
])
searchElStr3([
1_: fixed_: resultSet2,
2_: assign_: const_: pos_: arc,
3_: assign_: node_ : node_out_resSet2
])
searchSetStr5([
1_: fixed_: node_out_resSet2,
2_: assign_: pos_: arc_: const_: arc,
3_: assign_: const_: node_: node,
4_: assign_: pos_: arc_: const_: arc1,
5_: fixed_:atr2,
set3_: assign_: resultSet3
])
//#—————2_проходимтройку_——————
searchElStr3([
1_: fixed_: resultSet3,
2_: assign_: const_: pos_: arc,
3_: assign_: node_ : node_out_resSet3
])
searchSetStr3([
1_: fixed_: node_out_resSet3,
2_: assign_: pos_: arc_: const_: arc,
3_: assign_: node,
set3_: assign_: resultSet4
])
//#Альбомы описываются по трем аспектам, проверяем любой из
//#—————1_Проверка по типу записи_—————
label(other_handler)
searchElStr3([
1_: fixed_: resultSet4,
2_: assign_: const_: pos_: arc,
3_: assign_: node_ : node_out_resSet4
],,other_album)
//#Удаляемдугу arc проведеннуюиз resultSet4 к node_out_resSet4
eraseEl([
1_: fixed_: arc
])
//#———Отыскиваем альбом по его введенному описанию———
searchSetStr5([
1_: assign_: const_: node_: node,
2_: assign_: pos_: arc_: const_: arc,
3_: fixed_: node_out_resSet4,
4_: assign_: pos_: arc_: const_: arc1,
5_: fixed_:atr1,
set1_: assign_: resultSet1
])
searchSetStr5([
1_: assign_: const_: node_: node,
2_: assign_: pos_: arc_: const_: arc,
3_: fixed_: temp_node_with_param,
4_: assign_: pos_: arc_: const_: arc1,
5_: fixed_:atr2,
set1_: assign_: resultSet2
])
selectYStr3([
1_: fixed_: resultSet1,
2_: assign_: const_: pos_: arc,
3_: assign_: node_ : node,
set3_: fixed_: resultSet2
],,other_handler)
genElStr3([
1_: fixed_: result_set,
2_: assign_: const_: pos_: arc,
3_: fixed_: node_album
],other_album,)
label(not_other_album)
////////////////////////////////////////////////////////////////////////
////
//#Выделяемодинизэлементов temp_node_with_param огромного количества selected_els_copy
searchElStr3([
1_: fixed_: selected_els_copy,
2_: assign_: arc_: pos_: const_: arc,
3_: assign_: node_: temp_node_with_param
],,output)
//#Удаляемдугу arc проведеннуюиз selected_els_copy к temp_node
eraseEl([
1_: fixed_: arc
])
//#Делаем копию set_albums_copyвсех альбомов
searchSetStr3([
1_: fixed_: «Альбомы»,
2_: assign_: const_: pos_: arc_: arc,
3_: assign_: node_: const_: node,
set3_: assign_: set_albums_copy
])
//#Проверяем описание каких альбомов удовлетворяет узел temp_node_with_param
//#Берем один альбом node_album из огромного количества альбомов set_albums_copy
label(other_album1)
searchElStr3([
1_: fixed_: set_albums_copy,
2_: assign_: arc_: pos_: const_: arc,
3_: assign_: node_: const_: node_album
],,not_other_album1)
//#Удаляемдугу arc проведеннуюиз set_albums_copy к node_album
eraseEl([
1_: fixed_: arc
])
//#Найдем огромное количество set_album_paramвсех описаний альбома node_album
//#—————1_проходимпервуюпару_——————
searchSetStr5([
1_: assign_: const_: node_: node,
2_: assign_: pos_: arc_: const_: arc,
3_: fixed_: node_album,
4_: assign_: pos_: arc_: const_: arc1,
5_: fixed_:atr1,
set1_: assign_: resultSet1
])
searchSetStr3([
1_: fixed_: «описание*»,
2_: assign_: pos_: arc_: const_: arc,
3_: assign_: node,
set3_: assign_: resultSet2
])
selectYStr3([
1_: fixed_: resultSet1,
2_: assign_: const_: pos_: arc,
3_: assign_: node_ : node,
set3_: fixed_: resultSet2
])
searchElStr3([
1_: fixed_: resultSet2,
2_: assign_: const_: pos_: arc,
3_: assign_: node_ : node_out_resSet2
])
searchSetStr5([
1_: fixed_: node_out_resSet2,
2_: assign_: pos_: arc_: const_: arc,
3_: assign_: const_: node_: node,
4_: assign_: pos_: arc_: const_: arc1,
5_: fixed_:atr2,
set3_: assign_: resultSet3
])
//#—————2_проходимтройку_——————
searchElStr3([
1_: fixed_: resultSet3,
2_: assign_: const_: pos_: arc,
3_: assign_: node_ : node_out_resSet3
])
searchSetStr3([
1_: fixed_: node_out_resSet3,
2_: assign_: pos_: arc_: const_: arc,
3_: assign_: node,
set3_: assign_: resultSet4
])
//#Альбомы описываются по трем аспектам, проверяем любой из
//#—————1_Проверка по типу записи_—————
label(other_handler1)
searchElStr3([
1_: fixed_: resultSet4,
2_: assign_: const_: pos_: arc,
3_: assign_: node_ : node_out_resSet4
],,other_album1)
//#Удаляемдугу arc проведеннуюиз resultSet4 к node_out_resSet4
eraseEl([
1_: fixed_: arc
])
//#———Отыскиваем альбом по его введенному описанию———
searchSetStr5([
1_: assign_: const_: node_: node,
2_: assign_: pos_: arc_: const_: arc,
3_: fixed_: node_out_resSet4,
4_: assign_: pos_: arc_: const_: arc1,
5_: fixed_:atr1,
set1_: assign_: resultSet1
])
searchSetStr5([
1_: assign_: const_: node_: node,
2_: assign_: pos_: arc_: const_: arc,
3_: fixed_: temp_node_with_param,
4_: assign_: pos_: arc_: const_: arc1,
5_: fixed_:atr2,
set1_: assign_: resultSet2
])
selectYStr3([
1_: fixed_: resultSet1,
2_: assign_: const_: pos_: arc,
3_: assign_: node_ : node,
set3_: fixed_: resultSet2
],,other_handler1)
genElStr3([
1_: fixed_: result_set1,
2_: assign_: const_: pos_: arc,
3_: fixed_: node_album
],other_album1,)
////////////////////////////////////////////////////////////////////////
label(not_other_album1)
////////////////////////////////////////////////////////////////////////
//
//#Выделяемодинизэлементов temp_node_with_param огромного количества selected_els_copy
searchElStr3([
1_: fixed_: selected_els_copy,
2_: assign_: arc_: pos_: const_: arc,
3_: assign_: node_: temp_node_with_param
],,output)
//#Удаляемдугу arc проведеннуюиз selected_els_copy к temp_node
eraseEl([
1_: fixed_: arc
])
//#Делаем копию set_albums_copyвсех альбомов
searchSetStr3([
1_: fixed_: «Альбомы»,
2_: assign_: const_: pos_: arc_: arc,
3_: assign_: node_: const_: node,
set3_: assign_: set_albums_copy
])
//#Проверяем описание каких альбомов удовлетворяет узел temp_node_with_param
//#Берем один альбом node_album из огромного количества альбомов set_albums_copy
label(other_album2)
searchElStr3([
1_: fixed_: set_albums_copy,
2_: assign_: arc_: pos_: const_: arc,
3_: assign_: node_: const_: node_album
],,not_other_album2)
//#Удаляемдугу arc проведеннуюиз set_albums_copy к node_album
eraseEl([
1_: fixed_: arc
])
//#Найдем огромное количество set_album_paramвсех описаний альбома node_album
//#—————1_проходимпервуюпару_——————
searchSetStr5([
1_: assign_: const_: node_: node,
2_: assign_: pos_: arc_: const_: arc,
3_: fixed_: node_album,
4_: assign_: pos_: arc_: const_: arc1,
5_: fixed_:atr1,
set1_: assign_: resultSet1
])
searchSetStr3([
1_: fixed_: «описание*»,
2_: assign_: pos_: arc_: const_: arc,
3_: assign_: node,
set3_: assign_: resultSet2
])
selectYStr3([
1_: fixed_: resultSet1,
2_: assign_: const_: pos_: arc,
3_: assign_: node_ : node,
set3_: fixed_: resultSet2
])
searchElStr3([
1_: fixed_: resultSet2,
2_: assign_: const_: pos_: arc,
3_: assign_: node_ : node_out_resSet2
])
searchSetStr5([
1_: fixed_: node_out_resSet2,
2_: assign_: pos_: arc_: const_: arc,
3_: assign_: const_: node_: node,
4_: assign_: pos_: arc_: const_: arc1,
5_: fixed_:atr2,
set3_: assign_: resultSet3
])
//#—————2_проходимтройку_——————
searchElStr3([
1_: fixed_: resultSet3,
2_: assign_: const_: pos_: arc,
3_: assign_: node_ : node_out_resSet3
])
searchSetStr3([
1_: fixed_: node_out_resSet3,
2_: assign_: pos_: arc_: const_: arc,
3_: assign_: node,
set3_: assign_: resultSet4
])
//#Альбомы описываются по трем аспектам, проверяем любой из
//#—————1_Проверка по типу записи_—————
label(other_handler2)
searchElStr3([
1_: fixed_: resultSet4,
2_: assign_: const_: pos_: arc,
3_: assign_: node_ : node_out_resSet4
],,other_album2)
//#Удаляемдугу arc проведеннуюиз resultSet4 к node_out_resSet4
eraseEl([
1_: fixed_: arc
])
//#———Отыскиваем альбом по его введенному описанию———
searchSetStr5([
1_: assign_: const_: node_: node,
2_: assign_: pos_: arc_: const_: arc,
3_: fixed_: node_out_resSet4,
4_: assign_: pos_: arc_: const_: arc1,
5_: fixed_:atr1,
set1_: assign_: resultSet1
])
searchSetStr5([
1_: assign_: const_: node_: node,
2_: assign_: pos_: arc_: const_: arc,
3_: fixed_: temp_node_with_param,
4_: assign_: pos_: arc_: const_: arc1,
5_: fixed_:atr2,
set1_: assign_: resultSet2
])
selectYStr3([
1_: fixed_: resultSet1,
2_: assign_: const_: pos_: arc,
3_: assign_: node_ : node,
set3_: fixed_: resultSet2
],,other_handler2)
genElStr3([
1_: fixed_: result_set2,
2_: assign_: const_: pos_: arc,
3_: fixed_: node_album
],other_album2,)
////////////////////////////////////////////////////////////////////////
label(not_other_album2)
//////////////////////////
label(output)
////////////////////////////////////////////////////////////////////////
searchSetStr3([
1_: fixed_: result_set,
2_: assign_: const_: pos_: arc_: arc,
3_: assign_: node_: const_: node,
set3_: fixed_: output_set
])
//#Проверим является ли огромное количество result_set1 пустым
searchElStr3([
1_: fixed_: result_set1,
2_: assign_: const_: pos_: arc,
3_: assign_: node_ : node
],,out)
selectYStr3([
1_: fixed_: result_set1,
2_: assign_: const_: pos_: arc,
3_: assign_: node_ : node,
set3_: fixed_: output_set
])
//#Проверим является ли огромное количество result_set2 пустым
searchElStr3([
1_: fixed_: result_set2,
2_: assign_: const_: pos_: arc,
3_: assign_: node_ : node
],,out)
selectYStr3([
1_: fixed_: result_set2,
2_: assign_: const_: pos_: arc,
3_: assign_: node_ : node,
set3_: fixed_: output_set
])
////////////////////////////////////////////////////////////////////////
label(out)
ui_sheet_create([
1_: assign_: sheet,
2_: fixed_: sheet_type,
3_: fixed_: sheet_title,
4_: fixed_: layout
])
ui_output([1_: fixed_: sheet, 2_: fixed_: output_set])
return()
end
поиск композиции по рейтингу (файл type_rec.m4scp)
входные характеристики: узел, содержащий заглавие альбома;
выходные характеристики: тип альбома.
Пример диалога:
Набросок 3.2.9 — вопросец тип избранного альбома
метод:
Делаем копию входных характеристик.
Отыскиваем тип записи альбома.
Формируем результирующее огромное количество.
Начальный текст операции:
//#Операция получения типа записи альбома
#include «scp_keynodes.scsy»
#include «../seb/planimetry.scsy»
procedure(type_rec,
[[
sheet_type = «/proc/agents/shell/keynode/SCgSheet»;
sheet_title = /»Операция прошла удачно»/;
atr1 = «/proc/keynode/1_»;
atr2 = «/proc/keynode/2_»;
ui_information;
layout;
«MB_TITLE_QUERY_RESULT» = /»Результатзапроса»/;
«MB_TEXT_METKA» = /»Метка»/;
sall = «/etc/im_keynode/get_type»;
cmd = «/operation/ui_io_exec_command_par/exec_command_par»;
beg = /»…!!type_of_track!!..n»/;
«описание*»;
«тип записи*»;
«Исполнители»
]],
[{
sheet,
shift,
node,
node1,
node2,
node3,
node4,
node5,
performer,
arc,
arc1,
arc2,
arc3,
selected_els,
selected_els_copy,
set,
set1,
set2,
set3,
set4,
result_set,
output_set,
out,
descr
}],
{[
1_: in_: selected_els,
2_: in_: sheet,
3_: in_: shift
]}
)
//#Копия selected_els_copy входныхданных
searchSetStr3([
1_: fixed_: selected_els,
2_: assign_: const_: pos_: arc_: arc,
3_: assign_: node_: const_: node,
set3_: assign_: selected_els_copy
])
label(other_copy)
//#Выделяемодинизэлементов performer огромного количества selected_els_copy
searchElStr3([
1_: fixed_: selected_els_copy,
2_: assign_: const_: arc,
3_: assign_: const_: performer
])
//#Удаляемдугу arc проведеннуюиз selected_els_copy к performer
eraseEl([
1_: fixed_: arc
])
//#Проходим первую пятерку пары
searchSetStr5([
1_: assign_: const_: node1,
2_: assign_: const_: arc1,
3_: fixed_: performer,
4_: assign_: const_: arc2,
5_: fixed_: atr1,
set1_: assign_: set
],,other_copy,other_copy)
//#Под отношением описание*
searchSetStr3([
1_: fixed_: «описание*»,
2_: assign_: const_: arc,
3_: assign_: const_: node,
set3_: assign_: set1
])
//#Находим пересечение множеств set и set1
selectYStr3([
1_: fixed_: set1,
2_: assign_: const_: arc3,
3_: assign_: node_ : node2,
set3_: fixed_: set
],,other_copy,other_copy)
searchElStr3([
1_: fixed_: set,
2_: assign_: const_: arc,
3_: assign_: const_: node3
])
//#Проходим вторую пятерку пары
searchSetStr5([
1_: fixed_: node3,
2_: assign_: const_: arc1,
3_: assign_: node4,
4_: assign_: const_: arc2,
5_: fixed_: atr2,
set3_: assign_: set2
],,other_copy,other_copy)
searchElStr3([
1_: fixed_: set2,
2_: assign_: const_: arc,
3_: assign_: const_: node1
])
//#Проходимтройку
searchSetStr3([
1_: fixed_: node1,
2_: assign_: const_: arc,
3_: assign_: const_: node,
set3_: assign_: set
])
label(other_node)
searchElStr3([
1_: fixed_: set,
2_: assign_: const_: arc,
3_: assign_: const_: node5
])
//#Удаляемдугу arc
eraseEl([
1_: fixed_: arc
])
//#Проходим первую пятерку 2-ой пары
searchSetStr5([
1_: assign_: const_: node1,
2_: assign_: const_: arc1,
3_: fixed_: node5,
4_: assign_: const_: arc2,
5_: fixed_: atr1,
set1_: assign_: set3
],,other_node,other_node)
//#Под отношением тип записи*
searchSetStr3([
1_: fixed_: «типзаписи*»,
2_: assign_: const_: arc,
3_: assign_: const_: node,
set3_: assign_: set4
])
//#Находим пересечение множеств set3 и set4
selectYStr3([
1_: fixed_: set4,
2_: assign_: const_: arc3,
3_: assign_: node_ : node2,
set3_: fixed_: set3
],,other_node,other_node)
searchElStr3([
1_: fixed_: set3,
2_: assign_: const_: arc,
3_: assign_: const_: node3
])
//#Проходим вторую пятерку 2-ой пары
searchSetStr5([
1_: fixed_: node3,
2_: assign_: const_: arc1,
3_: assign_: const_: node5,
4_: assign_: const_: arc2,
5_: fixed_: atr2,
set3_: assign_: out
])
printNl([1_: fixed_: beg])
callReturn([1_: fixed_: cmd,
2_: fixed_:{[
1_: out,
2_: sheet,
3_: sall
]}
], descr)
return()
end
3.3 Верификация и отладка программ специфицированных операций
Отладка выполнялась при помощи ++, SRS Studio и сообщений в командной строке. В процессе отладки текущей версии системы был выявлен последующий ряд ошибок:
1. Добавление в файл menu.scsy новейшего пт меню: SRS Studio запускалась, но меню было не доступно .
Типовые ошибки:
· стояли излишние запятые в тексте программки;
· не хватало запятых;
· не хватало закрывающих list_next скобок.
2. Добавление nsm-комманд в файл event.scsx: при попытке надавить на пункт меню, соответственный nsm-комманде выводилось сообщение «Ошибка!Описание данного действия не найдено!»
Ошибка: в файле event.scsx указан неверный id либо ссылка на операцию.
Типовые ошибки, допущенные в процессе написания SCP-программы:
· не объявлены применяемые переменные;
· поставлены излишние запятые;
· не проставлены нужные запятые;
· проставлены излишние пробелы (при копировании операторов из Управления по SCP v0.7);
· проставлены атрибуты fixed_ заместо assign_ и напротив.
В итоге таковых ошибок при выбирании соответственного пт меню ничего не происходило.
3.4 Спецификация разработанных операций и библиотеки программ, сертификация разработанных ip-компонентов
В процессе разработки был реализовано наиболее 20 разных scp-операций поиска. Выделить посреди их какой-нибудь ip-компонент, на данный момент, не представляется вероятным, т.к. тема проекта достаточно спец и интеграции с иными системами не призводилось.
4. Пользовательский интерфейс проектируемой умственной справочной системы
4.1 Задачно-ориентированная спецификация пользовательского интерфейса проектируемой умственной системы
4.1.1 Декомпозиция пользовательского интерфейса
Пользовательский интерфейс данной умственной справочной системы можно поделить на ряд подсистем зависимо от задачки, на которую они нацелены:
Подсистема диалога с юзером (windows-окна, scs-окна, диалоговые окна, элементы управления);
Подсистема трансляции с языка SC на естественный язык;
Подсистема обработки действий юзера;
Подсистема хранения данных для отображения на дисплее.
4.1.2 Перечень применяемых ip-компонентов пользовательского интерфейса
Для разработки данной умственной справочной системы были применены последующие ip-компоненты:
Окна scs-интерфейса
диалоговые scs-окна
Окно раздела справочной инфы SRS
это srs-окно,
класс sheet
класс shell
атомарные системные интерфейсные команды:
main_menu
update_menu
reduce_menu
load_folder
load_scg
save_scg
build_srs
erase_set
open_gwf
change_colour
reduction
increase
select_all
modify_scg_el_content
modify_scg_el_type
modify_scg_el_name
erase_scg_countur
erase_scg_el
paste
copy
gen_srswindow
child_command
4.2 Проектирование интерфейсных подсистем
Интерфейсная подсистема является умственной системой, построенной по семантическим технологиям. Потому для каждой интерфейсной подсистемы проектируется своя база познаний и машинка обработки познаний.
База познаний пользовательского интерфейса умственной справочной системы по МП содержит в себе главные узлы интерфейсных установок (файл em_keynode), описание обработчиков интерфейсных установок(event.scsy), дерево событий(event.scsy).
машинка обработка познаний пользовательского интерфейса содержит в себе последующие классы интерфейсных операций:
• рецепторные операции(юзер-память)
• системные эффекторные операции(память-память)
• пользовательские эффекторные операции (память-пользователь)
Примером рецепторной операции является функция обработки нажатия клавиши, она производит генерацию огромного количества выходных характеристик:
void pluginView::OnBnClickedButton2()
{
CComboBox *combo = new CComboBox();
combo = (CComboBox*)GetDlgItem(IDC_COMBO1);
CString str;
int index = combo->GetCurSel();
combo->GetLBText(index, str);
m_pSheet->sendMyEv(«323322222222222221», str);//получитькомпозициистакимрейтингом
}
Примером системных эффекторных операций является операция ui_io_exec_command, которая генерирует результирующую sc-конструкцию интерфейсной операции для следующей её обработки:
///////////////////////////////////////////////////////////////////////////////
//
//
#include «scp_keynodes.scsy»
#include «../seb/planimetry.scsy»
#include «im_keynodes.scsy»
procedure(exec_command,
[[
«main window»= «/etc/im_keynode/main window»;
ch_comm = «/etc/im_keynode/child_command»;
$errors_found = /»Ошибочно заданы аргументы.»/;
sheet_type = «/proc/agents/shell/keynode/SCgSheet»;
layout =c= /»logical»/;
p_sheet_title =c= /»Результатыверификации»/;
1_, 2_;
]],
[{
notfound,main_wnd,show_set,comm,p2,s,cmd,
arc,a,arc2,
resultall,
command,
segment,scg_el,wnd,sheet,set_scg_el
}],
{[
1_: in_: set_scg_el,
2_: in_: sheet,
3_: in_: cmd
]}
)
genEl([
1_: assign_: node_:const_:resultall
])
searchElStr3([1_: fixed_: «main window»,
2_: assign_: a,
3_: assign_: main_wnd],,notfound)
sys_get_location([1_: fixed_: main_wnd, 2_: assign_: segment])
sys_set_default_segment([1_: fixed_: segment])
genEl([
1_: assign_: node_:const_:command
])
genElStr3([
1_: fixed_: ch_comm,
2_: assign_: arc_:const_: pos_: arc,
3_: fixed_: command
])
genElStr3([
1_: fixed_: resultall,
2_: assign_: arc_:const_: pos_: a,
3_: fixed_: ch_comm
])
genElStr3([
1_: fixed_: resultall,
2_: assign_: arc_:const_: pos_: a,
3_: fixed_: command
])
genElStr3([
1_: fixed_: resultall,
2_: assign_: arc_:const_: pos_: a,
3_: fixed_: arc
])
///////////////////////////////////////////////
// создание характеристик команды
//
// первыйпараметр
genElStr5([1_: fixed_: command,
2_: assign_: const_: actual_: pos_: temporary_: arc,
3_: fixed_: sheet,
4_: assign_: const_: actual_: pos_: temporary_: arc2,
5_: fixed_: 1_
])
genElStr3([
1_: fixed_: resultall,
2_: assign_: arc_:const_: pos_: a,
3_: fixed_: sheet
])
genElStr3([
1_: fixed_: resultall,
2_: assign_: arc_:const_: pos_: a,
3_: fixed_: 1_
])
genElStr3([
1_: fixed_: resultall,
2_: assign_: arc_:const_: pos_: a,
3_: fixed_: arc
])
genElStr3([
1_: fixed_: resultall,
2_: assign_: arc_:const_: pos_: a,
3_: fixed_: arc2
])
// генерация узла связки второго параметра команды
genElStr5([1_: fixed_: command,
2_: assign_: const_: actual_: pos_: temporary_: arc,
3_: assign_: const_: node_: p2,
4_: assign_: const_: actual_: pos_: temporary_: arc2,
5_: fixed_: 2_
])
genElStr3([
1_: fixed_: resultall,
2_: assign_: arc_: const_: pos_: a,
3_: fixed_: p2
])
genElStr3([
1_: fixed_: resultall,
2_: assign_: arc_: const_: pos_: a,
3_: fixed_: 2_
])
genElStr3([
1_: fixed_: resultall,
2_: assign_: arc_: const_: pos_: a,
3_: fixed_: arc
])
genElStr3([
1_: fixed_: resultall,
2_: assign_: arc_: const_: pos_: a,
3_: fixed_: arc2
])
// генерация второго параметра
genElStr5([1_: fixed_: p2,
2_: assign_: const_: actual_: pos_: temporary_: arc,
3_: assign_: const_: node_: s,
4_: assign_: const_: actual_: pos_: temporary_: arc2,
5_: fixed_: 1_
])
genElStr3([
1_: fixed_: resultall,
2_: assign_: arc_: const_: pos_: a,
3_: fixed_: s
])
genElStr3([
1_: fixed_: resultall,
2_: assign_: arc_: const_: pos_: a,
3_: fixed_: arc
])
genElStr3([
1_: fixed_: resultall,
2_: assign_: arc_: const_: pos_: a,
3_: fixed_: arc2
])
// формируемдочернююкоманду
genElStr5([1_: fixed_: cmd,
2_: assign_: const_: actual_: pos_: temporary_: arc,
3_: assign_: const_: node_: comm,
4_: assign_: const_: actual_: pos_: temporary_: arc2,
5_: fixed_: s
])
genElStr3([
1_: fixed_: resultall,
2_: assign_: arc_: const_: pos_: a,
3_: fixed_: comm
])
genElStr3([
1_: fixed_: resultall,
2_: assign_: arc_: const_: pos_: a,
3_: fixed_: arc
])
genElStr3([
1_: fixed_: resultall,
2_: assign_: arc_: const_: pos_: a,
3_: fixed_: arc2
])
genElStr3([
1_: fixed_: s,
2_: assign_: arc_: const_: pos_: arc,
3_: fixed_: comm
])
genElStr3([
1_: fixed_: resultall,
2_: assign_: arc_: const_: pos_: a,
3_: fixed_: arc
])
genElStr3([
1_: fixed_: s,
2_: assign_: arc_: const_: pos_: arc,
3_: fixed_: cmd
])
genElStr3([
1_: fixed_: resultall,
2_: assign_: arc_: const_: pos_: a,
3_: fixed_: arc
])
varAssign([1_:assign_:wnd,2_:fixed_:main_wnd],ok_msg,ok_msg)
// если произошла неверная ситуация
label(err_msg)
genElStr3([1_: fixed_:resultall,
2_: assign_: const_: temporary_: actual_: pos_: a,
3_: fixed_: $errors_found])
ui_sheet_create([ 1_: assign_: const_: node_: wnd,
2_: fixed_: sheet_type,
3_: fixed_: p_sheet_title,
4_: fixed_: layout])
printEl([1_: resultall])
// выводрезультата
label(ok_msg)
ui_send([1_: fixed_: wnd, 2_: fixed_: resultall])
eraseEl([1_:fixed_: f_: resultall])
return()
end
Примером пользовательской эффекторной операции (память-пользователь) является функция setAlbumList, которая обрабатывает главный узел интерфейсной команды для отображения идентификаторов выходных характеристик в отран управления:
void pluginSheet::setAlbumList(sc_addr addr)
{
CArray<sc_string, sc_string&> albumList;
albumList.FreeExtra();
Shell* shell = Shell::getInstance();
sc_session* s = shell->getSession();
sc_iterator* it = s->create_iterator(sc_constraint_new(CONSTR_3_f_a_a, addr, 0, 0),true);
for(; !it->is_over(); it->next())
{
sc_addr album_addr = it->value(2);
sc_string str = s->get_idtf(album_addr);
albumList.Add(str);
}
m_pView->UpdateListBox2(albumList);
}
4.3 Верификация и отладка пользовательского интерфейса
Для реализации и тестирования базы данных употреблялся SRS Studio. Для написания кода операций употреблял ++, интерфейс реализован по средствам библиотек MFC на языке программирования С++, верификация и тестирование при помощи SRS Studio, Microsoft Visual Studio .NET 2003 илога pm вкоманднойстроке.
4.4 Спецификация разработанного пользовательского интерфейса, сертификация разработанных ip-компонентов
5. Интеграция разработанной системы с иными системами
Умственная справочная система быть может интегрирована с иными система, работающими в данной предметной области.
Не считая этого могут быть взяты операции и ip-компоненты для высококачественного улучшения системы.
Интеграция дозволит расширить как базу познаний, так и список реализуемых операций, что сделает систему еще наиболее нужной для конечного юзера.
Но совместно с тем нужно оценить издержки нужные для интеграции (приведение базы познаний к схожим главным элементам, внедрение схожих конструкций, соответственная реализация определенных операций), и на базе анализа избрать лучшую стратегию.
С целью облегчения процесса интеграции нужно разрабатывать ip-компоненты всех подсистем умственной системы (базы познаний, машинки обработки познания и пользовательского интерфейса), которые не зависят от реализации определенной базы познаний.
6. Направления предстоящего развития макета умственной справочной системы и пути промышленного производства спроектированной умственной системы
Для настоящего функционирования справочной системы и заслуги главной цели – способность системы отвечать на самые нетривиальные вопросцы и завлекать широкие массы юзеров, необходимо:
Последующие развитие базы познаний, добавление новейших предметных узлов и главных частей. Не считая этого база обязана пополняться и расширяться новенькими познаниями, которые будут генерироваться при работе операций.
Развитие машинки обработки заключается в увеличении количества классов задач, которые будет решать данная умственная справочная система.
Пользовательский интерфейс прикладной системы должен давать возможность работать как с информацией, представленной на языках, являющихся подмножествами языка SC, так и на естественном языке.
Сначала нужно уделить огромное внимание естественно-языковому интерфейсу, потому что SCg-конструкции, которые система генерирует на данный момент, являются очень массивными и не комфортными для восприятия. Ответ на формальном языке представляет собой доп барьер для осознания инфы и делает систему не подходящей для юзеров, не знакомых с теорией множеств и языком SC.
Пользовательский интерфейс должен давать возможность юзеру сосредоточиться на постановке задачки, а не на методе её заслуги. время и усилия, которые нужны юзеру для заслуги цели, должны сводиться к минимуму.
Следует уделить внимание «дружелюбности» интерфейса. Нужно стремиться к тому, чтоб даже не опытнейшему юзеру было понятно, как работать с системой. Время, которое нужно для освоения способностей работы со средой умственной справочной системы обязано сводиться к минимуму.
7. Вклад в развитие семантических технологий проектирования умственных систем
7.1 Перечень выявленных ошибок среды проектирования умственных систем
Опосля закрытия всех окон SRS-Studio, в системе остаётся незавершенный процесс, который не даёт запуститься собранной системе либо ещё одной копии SRS-Studio.
При загрузке sc-элементов в память не загружаются дуги.
7.2 Перечень предложений по совершенствованию среды проектирования умственных систем
Доработка управления юзера по операциям на языке SCP.
Разработка инвентаря для написания scp-программ (минимум отладчика).
Написание новейших scp-функций (к примеру, переход по паре).
Исправление обозначенных ошибок.
Создание ip-компонентов базы познаний, машинки обработки познаний, пользовательского интерфейса.
Отладка текущего инвентаря для уменьшения применяемых ресурсов.
7.3 Перечень предложений по совершенствованию семантических технологий проектирования умственных систем
Нужна разработка инвентаря отменно новейшего уровня (предложения по развитию представлены в разделе 7.3.), потому что работа с инструментарием на данном шаге затрудняет внедрение данной технологии.
Исследование в рамках учебного процесса студентами теоретических основ, нужных для использования и внедрения данной технологии (теория множеств, модели представления познаний, язык программирования scp и др.)
Так же принципиальным шагом в развитии технологии является создание ip-компонентов, задачка которых упростить и убыстрить процесс разработка за счёт повторного использования каких-то частей умственной системы. Принципиальным является создание ip-компонентов всех подсистем: базы познаний, машинки обработки познаний, пользовательского интерфейса.
7.4 Создание и внедрение ip-компонентов
Сделанная БЗ, набор операций и отдельные элементы пользовательского интерфейса могут быть применены в умственных справочных системах смежных областей, в качестве ip-компонентов. Что дозволит убыстрить их разработку, расширить функционал. Таковым образом с нескончаемым числом интеграций с иными умственными справочными системами, получится система, которая будет хранить нескончаемое количество инфы, отвечать на любые поставленные нетривиальные вопросцы, а общение меж юзером и системой будет происходить средством миролюбивого пользовательского интерфейса.
Библиографический указатель
1. Режим доступа: HTTP://www.skilfully.org/18.08.2008/1. — Дата доступа: 21.12.2008.
2. Режим доступа: HTTP://www.encyclopedia.ru/news/enc/detail/2321/. – Дата доступа: 21.12.2008.
3. Справочно-информационный портал Википедия. — Режим доступа: http://ru.wikipedia.org/wiki/Семантическая_паутина. — Дата доступа: 20.12.2008.
4. The Semantic Web. Scientific American, 17 мая 2001, российский перевод: Семантическая сеть.
5. Справочно-информационный портал Википедия. — Режим доступа: HTTP://ru.wikipedia.org/wiki/Семантическая_сеть. — Дата доступа: 21.12.2008.
6. HTTP://www.trizland.ru/trizba.php?id=186. – Дата доступа: 21.12.2008.
7. Управление разраба семантической справочной системы, Минск, 2008.
8. Управление по программированию на языке SCP, Минск, 2005.
]]>