Выходные параметры: вид данного исполнителя.
Способ вызова: при выборе исполнителя из ListBox.
Спецификацияоперации kind_of_performer.m4scp.
Идентификатороперации: descr_kind_of_performer.
Полноеимя: \operation\kind_of_performer.m4scp.
Комментарий: операция поиска в БЗ вида данного исполнителя.
Автор: Лукша Н.В.
6. Классификация операции year_of_foundation.m4scp.
Названиеоперации: year_of_foundation.
Предметная ориентация: МП.
Входные параметры: узел с именем исполнителя.
Выходные параметры: год основания данного исполнителя.
Способ вызова: при выборе исполнителя из ListBox.
Спецификацияоперации year_of_foundation.m4scp.
Идентификатороперации: descr_year_of_foundation.
Полноеимя: \operation\year_of_foundation.m4scp.
Комментарий: операция поиска в БЗ года основания данного исполнителя.
Автор: Лукша Н.В.
7. Классификация операции type_rec.m4scp.
Название операции: type_rec.
Предметная ориентация: МП.
Входные параметры: узел с именем альбома.
Выходные параметры: тип записи данного альбома.
Способ вызова: при выборе исполнителя из ListBox.
Спецификация операции type_rec.m4scp.
Идентификатор операции: descr_type_rec.
Полноеимя: \operation\type_rec.m4scp.
Комментарий: операция поиска в БЗ типа записи данного альбома.
Автор: Лукша Н.В.
8. Классификация операции vol.m4scp.
Название операции: vol.
Предметная ориентация: МП.
Входные параметры: узел с именем альбома.
Выходные параметры: тип записи данного альбома.
Способ вызова: при выборе исполнителя из ListBox.
Спецификация операции vol.m4scp.
Идентификатор операции: descr_vol.
Полноеимя: \operation\vol.m4scp.
Комментарий: операция поиска в БЗ типа записи данного альбома.
Автор: Лукша Н.В.
9. Классификация операции style_of_track.m4scp.
Название операции: style_of_track.
Предметная ориентация: МП.
Входные параметры: узел с именем альбома.
Выходные параметры: тип записи данного альбома.
Способ вызова: при выборе исполнителя из ListBox.
Спецификация операции style_of_track.m4scp.
Идентификатороперации: descr_style_of_track.
Полноеимя: \operation\style_of_track.m4scp.
Комментарий: стиль МП.
Автор: Лукша Н.В.
10. Классификация операции rewards.m4scp.
Название операции: rewards.
Предметная ориентация: МП.
Входные параметры: узел с именем альбома.
Выходные параметры: тип записи данного альбома.
Способ вызова: при выборе исполнителя из ListBox.
Спецификация операции rewards.m4scp.
Идентификатор операции: descr_rewards.
Полноеимя: \operation\rewards.m4scp.
Комментарий: награды данного альбома.
Автор: Лукша Н.В.
11. Классификация операции type_rec.m4scp.
Название операции: type_rec.
Предметная ориентация: МП.
Входные параметры: узел с именем альбома.
Выходные параметры: тип записи данного альбома.
Способ вызова: при выборе исполнителя из ListBox.
Спецификация операции type_rec.m4scp.
Идентификатор операции: descr_type_rec.
Полноеимя: \operation\type_rec.m4scp.
Комментарий: операция поиска в БЗ типа записи данного альбома.
Автор: Лукша Н.В.
12. Классификация операции rating.m4scp.
Название операции: rating.
Предметная ориентация: МП.
Входные параметры: узел с именем альбома.
Выходные параметры: тип записи данного альбома.
Способ вызова: при выборе исполнителя из ListBox.
Спецификация операции rating.m4scp.
Идентификатор операции: descr_rating.
Полноеимя: \operation\rating.m4scp.
Комментарий: рейтинг данной композиции.
Автор: Лукша Н.В.
13. Классификация операции label_rec.m4scp.
Название операции: label_rec.
Предметная ориентация: МП.
Входные параметры: узел с именем альбома.
Выходные параметры: тип записи данного альбома.
Способ вызова: при выборе исполнителя из ListBox.
Спецификация операции label_rec.m4scp.
Идентификатор операции: descr_label_rec.
Полноеимя: \operation\label_rec.m4scp.
Комментарий: поиск лейбла звукозаписи.
Автор: Лукша Н.В.
В написанных scp-операциях подпрограммы не использовались.
3.2 Алгоритмы и исходные тексты программ, реализующие операции машины обработки знаний прототипа интеллектуальной справочной системы
· поиск альбома по описанию (файл search_by_param.m4scp)
· входные параметры: узлы, характеризующие искомый альбом;
· выходные параметры: все альбомы подходящие под данное описание.
Алгоритм:
Делаем копию входных параметров.
Проверяем первый параметр.
Находим все альбомы, которые удовлетворяют п.2 и объединяем их в множество 1.
Проверяем второй параметр (если такового нет, переходим п.10).
Находим все альбомы, которые удовлетворяют п.4 и объединяем их в множество 2.
Проверяем третий параметр (если такового нет, переходим в п.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,