Исходный текст операции:
//#Операция получения страны выбранного исполнителя
#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,