3.1.5 Декомпозиция операций на подпрограммы и содержательная структура библиотеки программ специфицированных операций
В написанных 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,
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.
Исходный текст операции:
//#Операция общее между двумя альбомами
#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
])
//#Проходим первую пятерку второй пары
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
])
//#Проходим вторую пятерку второй пары
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
])
//#Проходим первую пятерку второй пары
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
])
//#Проходим вторую пятерку второй пары
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 Верификация и отладка программ специфицированных операций
Отладка производилась с помощью Notepad++, 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 на естественный язык;
Подсистема обработки действий пользователя;
Подсистема хранения данных для отображения на экране.
... учащихся в музыкальной деятельности будет посвящен следующий раздел нашего исследования. Глава II. Теоретические и практические аспекты педагогических условий самореализации учащихся в музыкальной деятельности II.1 Педагогические условия самореализации учащихся в музыкальной деятельности Принимая во внимание факт значимости роли самого субъекта в протекании процессов "само" считаем ...
... : регуляции внимания, динамической организации движения, моторной активности, общего эмоционального фона организации деятельности и т.д. 3. Разработка МОДЕЛИ вариативной системы дошкольного образования в условиях города 3.1 Эффективность типа дошкольных образовательных учреждений Современное общество предъявляет новые требования к системе образования подрастающего поколения и, в том ...
... ". Принятый вскоре Закон РСФСР "О собственности в РСФСР" от 24 декабря 1990 г.4 наряду с повторением в п. 4 ст. 1, в сущности, той же мысли, в ч. 2 п. 4 ст. 2 дополнительно разъяснял, что "объектами интеллектуальной собственности являются произведения науки, литературы, искусства и других видов творческой деятельности в сфере производства, в том числе открытия, изобретения, рационализаторские ...
... : 05.01.06 г. – 15.01.06 г. - 22 - 1.2. Результаты оценки Ниже представлены результаты расчета рыночной стоимости оцениваемых объектов, полученные с применением двух основных методов оценки интеллектуальной собственности: по методу учета чистого дохода. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8300 долл. по методу освобождения от роялти. . . . . . . . . . . . . . . ...
0 комментариев