Функция unnest оператора пути
Следующий текст на языке EXPRESS реализует функцию unnest, на которую даны ссылки в 10.8 и 10.9:
FUNCTION unnest (src : GENERIC) : AGGREGATE OF GENERIC; |
LOCAL |
result : AGGREGATE OF GENERIC := [ ]; |
tmp : AGGREGATE OF GENERIC; |
END_LOCAL; |
IF SIZEOF ( [ 'LIST', 'BAG', 'SET', 'ARRAY', 'AGGREGATE' ] * TYPEOF (src)) > 0 |
THEN |
REPEAT i := 1TO HIINDEX (src); |
tmp := unnest (src [i]); |
REPEAT j := 1 TO HIINDEX (tmp); |
result := result + tmp [j]; |
END_REPEAT; |
END_REPEAT; |
ELSE |
IF SIZEOF ( [ 'STRING', 'BINARY', 'LOGICAL', 'NUMBER' ] * TYPEOF (src) ) = 0 |
THEN -- entity instance |
result := result + src; |
END_IF; |
END_IF; |
RETURN (result); |
END_FUNCTION; |