#] #] ********************* #] loaddefs link d_Qndfs 'Structure.ndf' # www.BillHowell.ca initial ?date - when I ran Windows last ~2010?, # VERY [simple, cludgy, useful] way to avoid the lack of a call-by-name capability in QNial # copy-over work_structure with one that you are using # to allow multiple structures at the same time, gets messy - [create work 1, work2, ...] # but best suited to one big structure # 05May2016 mods, 07Aug2017 shorten op_names # IMPORTANT - create spcialized structures, but these have to be copied to general structures # (eg work[,0,1,2,3..]_structure) with specialised operators specific to them # This is the only way I could think of getting around the call-by-name deficiency of QNial. # With multiple work[,0,1,2,3..]_structures, creat eg 'sg_test03 IS sg_' expressions to give appearance # that specialised operators are being used (and to keep sysmbol meanings clear for user) # 04Feb2021 example : see link d_Qndfs 'economics, markets/Puetz test03 DUWS_2011 cycles 26-35.ndf' : # real structure - struture operators actually work on the "real structures" to ensure no call-by-value # avatar structure - carries a special name so that it is easy to relate to code being used # only ONE avatar per real structure!!!! # eg sg_test03 IS s0_g when test03 structure has been copied to s0_ # eg sg_test03 IS s1_g when test03 structure has been copied to s1_ f_struct := 'Structure.ndf' ; loaddefs_start f_struct ; #**************************** # List of operators, generated with : # $ cat "$d_Qndfs""Structure.ndf" | grep "^#]" | sed 's/^#\]/ /' # ********************* loaddefs link d_Qndfs 'Structure.ndf' ToDos +-----+ Generic structure operators - for use by any [real, avatar] structure sdefine_ IS OP s_structPhr s_raw - structure definition +----------------+ Real structure operators - for use by any avatar structure, but just one avatar per real +-----+ s0_ - first of several [simple, real] 2D structures, for which avatars are used in apps s0_g IS OP s_lab - get component of structure s0_p IS OP s_lab s_value - [put,change] component of structure s0_h IS OP s_lab - help, retrieve short description for a label s0_w IS - write s0_, one format for showing a 2D data structure (table) +-----+ s1_ - second of several [simple, real] 2D structures, for which avatars are used in apps s1_g IS OP s_lab - get component of structure s1_p IS OP s_lab s_value - [put,change] component of structure s1_h IS OP s_lab - help, retrieve short description for a label s1_w IS - write s1_, one of many formats for showing a 2D data structure (table) +-----+ s2_ - third of several [simple, real] 2D structures, for which avatars are used in apps s2_g IS OP s_lab - get component of structure s2_p IS OP s_lab s_value - [put,change] component of structure s2_h IS OP s_lab - help, retrieve short description for a label s2_w IS - write s2_, one format for showing a 2D data structure (table) +-----+ General hierarchical tree structure (not developed fully) s_varsTypesAdd IS OP s_valuePhr s_TypePhr - general (tree) structure SEQ_REST IS OP f_A_Phr f_A_B_Phr A B - my screw-ups with transformers : s_phrList_to_indx IS OP s_TypePhr s_labPhrList - sG_g IS OP s_Phr s_labPhrList - sG_gtests IS - sG_p IS OP s_TypePhr s_Phr s_labPhrList s_value - sG_ptests IS +-----+ Playing around - perhaps for some time in the future sgLab_ IS OP winComp compLabSeq - perhaps for some time in the future +-----+ Older approach - from several years before Aug2017, but I can't remember when struct_get_def IS OP struct_name component_name - get definition of structure struct_get_many IS OP struct_name component_names - get many components of structure sp_ IS OP struct_name component_name new_value - put value into structure struct_help IS OP struct_name component_name - help message for structure struct_get_deep IS OP struct_name component_name component_path - struct_put_deep IS OP struct_name component_name component_path new_value - untested!! # *************************** # Setup # Library directories - defined in "[/media/bill/PROJECTS,$HOWELL_computer]/Qnial/setup.ndf" setwidth 120 ; % normal is 80 characters, can do much more on high-res ; % screensize returns current value, doesn't work in my compilation! ; chrcd_char := 96 ; % back-slanting apostrophe ; char_char := char chrcd_char ; write 'done loading Library directories ' ; #********************************* #] ToDos # other possibilities - should use QNial rosterdb or frames, but this is simple and fast - Casting doesn't work - can't "find" structure!! # I should set up a "choose" operation, not a "find" # 05Oct2017 - to view structure with labels col 0 and values col 1 : # 1 0 blend (value "s_structPhr) #********************************** # Examples of use # Example setup - simple 2D array : email_extract_dat_general := "d_inn '/media/bill/SWAPPER/2018 WCCI Rio de Janiero/mass emails/z_Archive/' "f_txt '9_cumulative mass&other emails & lists.txt' ; "d_out '/media/bill/Midas/a_INNS Lexicom email server/key emails extraction/' ; "f_rot 'key emails' ; # examples of use : $ find "/media/bill/SWAPPER/Qnial/MY_NDFS/" -maxdepth 1 -name "*" | tr \\n \\0 | xargs -0 -IFILE grep --with-filename --line-number "sd_" "FILE" /media/bill/SWAPPER/Qnial/MY_NDFS/emails from conf papers.ndf:63:# sd_ IS OP s_raw : structure definition /media/bill/SWAPPER/Qnial/MY_NDFS/emails from conf papers.ndf:170:sd_ "NIPS2017_emails_extract /media/bill/SWAPPER/Qnial/MY_NDFS/emails from conf papers.ndf:184:sd_ "NIPS2017_emails /media/bill/SWAPPER/Qnial/MY_NDFS/email - extract, sort, cull addresses from text.ndf:91:# sd_ IS OP s_raw : structure definition /media/bill/SWAPPER/Qnial/MY_NDFS/email - extract, sort, cull addresses from text.ndf:656: sd_ "dat /media/bill/SWAPPER/Qnial/MY_NDFS/email - extract, sort, cull addresses from text.ndf:726: sd_ "dat /media/bill/SWAPPER/Qnial/MY_NDFS/email - extract, sort, cull addresses from text.ndf:779:sd_ "emex_general /media/bill/SWAPPER/Qnial/MY_NDFS/email - extract, sort, cull addresses from text.ndf:789:sd_ "emex_BadAddress /media/bill/SWAPPER/Qnial/MY_NDFS/email - extract, sort, cull addresses from text.ndf:801:sd_ "emex_keyEmails /media/bill/SWAPPER/Qnial/MY_NDFS/email - extract, sort, cull addresses from text.ndf:878: sd_ "dat #***************************************************************** #] +-----+ #] Generic structure operators - for use by any [real, avatar] structure IF flag_debug THEN write '+-----+' ; ENDIF ; IF flag_debug THEN write 'Simple 2D structure' ; ENDIF ; IF flag_debug THEN write 'loading sd_' ; ENDIF ; #] sd_ IS OP s_structPhr s_raw - structure definition # 07Aug2017 for now only for simple 2D s_raw # 20Aug2017 removed - as this is straightforward after separating # the type and values in separate variables # Also makes it easily to generalise to more complex types # 15Jan2021 I changed to 3 columns to add help descriptions # old operators won't work now!!!! sd_ IS OP s_structPhr s_raw { assign s_structPhr (cols ((floor (gage shape s_raw / 3)) 3 reshape s_raw)) } sdefine_ IS sd_ IF flag_debug THEN write 'Alternative initial real structures, required to load [data, optrs] ' ; ENDIF ; #] Alternative initial real structures, required to load [data, optrs] sdefine_ "s0_ ("nothing [null] 'nothing to say') ; sdefine_ "s1_ ("nothing [null] 'nothing to say') ; sdefine_ "s2_ ("nothing [null] 'nothing to say') ; #] sCompare_ IS OP struct0 struct1 - shows differences, only useful when structures are same # 16Jan2021 initial, untested sCompare_ IS OP struct0 struct1 { sCompare_booleans := TWIG = struct0 struct1 ; sCompare_booleans EACHRIGHT choose struct0 struct1 ; } #***************************************************************** #] +----------------+ #] Real structure operators - for use by any avatar structure, but just one avatar per real, #] specialised expressions to hide real structure, eg "put_test03 IS s1_p" IF flag_debug THEN write '+-----+' ; ENDIF ; IF flag_debug THEN write 'Real structure operators - for use by any avatar structure, but just one avatar per real' ; ENDIF ; #***************************************************************** #] +-----+ #] s0_ - first of several [simple, real] 2D structures, for which avatars are used in apps IF flag_debug THEN write '+-----+' ; ENDIF ; IF flag_debug THEN write 's0_ - first of several [simple, real] 2D structures' ; ENDIF ; # I should set up a "choose" operation, not a "find" # 05Oct2017 - to view structure with labels col 0 and values col 1 : # 1 0 blend (value "s_structPhr) IF flag_debug THEN write 'loading s0_g IS OP s_lab - get component of structure' ; ENDIF ; #] s0_g IS OP s_lab - get component of structure # 05Oct2017 - converted to using s_structPhr instead of passing values s0_g IS OP s_Lab { LOCAL s_Lab_Indx ; NONLOCAL work0_struct ; IF (isfault (s_Lab_Indx := find_Howell s_Lab s0_@0)) THEN fault (link 'Error : s0_g (structure get), unknown s_Lab : ' (string s_Lab)) ELSE s0_@@(1 s_Lab_Indx) ENDIF } # s0_g "PSO_paramL (3.00481 6.23759 1.032 1.3912 5.69972 0.852709 5.52022 0.792877 1.31149 1.48436 0.16292 0.200175 0.340959 0.491262 0.643311 0.128514 0.928299 0.919618 0.0188848 0.3963) # s0_g "momentum 'reduces particles velocities as swarm runs' # s0_g "mometum 'Error : s1_h (structure component help), unknown s_Lab : mometum' # s0_g "n_weight 'Error : s1_h (structure component help), unknown s_Lab : n_weight' IF flag_debug THEN write 'loading s0_p IS OP s_lab s_value - [put,change] component of structure' ; ENDIF ; #] s0_p IS OP s_lab s_value - [put,change] component of structure # "place" usage is probably wrong! s0_p IS OP s_lab s_value { LOCAL i s_label s_values ; NONLOCAL s0_ ; IF (isfault (indx := find_Howell s_Lab s0_@0)) THEN fault (link 'Error : s0_p (structure put), unknown s_Lab : ' (string s_Lab)) ELSE deepupdate "s0_ (1 indx) s_value ; ENDIF } # loaddefs link d_Qndfs 'Structure.ndf' IF flag_debug THEN write 'loading s0_p_test IS - test s0_p' ; ENDIF ; #] s0_p_test IS - test s0_p s0_p_test IS { original_partial_struct := EACH s0_g "n_particles "E_CUTOFF "MAXV "MAXITER "momentum "max_runs "n_params "PSO_paramL "n_seeds "seedIndxL "seedParamL ; write original_partial_struct ; "n_particles "E_CUTOFF "MAXV "MAXITER "momentum "max_runs "n_params "PSO_paramL "n_seeds "seedIndxL "seedParamL EACHBOTH s0_p (tell 11) ; new_partial_struct := EACH s0_g "n_particles "E_CUTOFF "MAXV "MAXITER "momentum "max_runs "n_params "PSO_paramL "n_seeds "seedIndxL "seedParamL ; write new_partial_struct ; "n_particles "E_CUTOFF "MAXV "MAXITER "momentum "max_runs "n_params "PSO_paramL "n_seeds "seedIndxL "seedParamL EACHBOTH s0_p original_partial_struct ; write (EACH s0_g "n_particles "E_CUTOFF "MAXV "MAXITER "momentum "max_runs "n_params "PSO_paramL "n_seeds "seedIndxL "seedParamL) ; } # s0_p "PSO_paramL (3.00481 6.23759 1.032 1.3912 5.69972 0.852709 5.52022 0.792877 1.31149 1.48436 0.16292 0.200175 0.340959 0.491262 0.643311 0.128514 0.928299 0.919618 0.0188848 0.3963) # s0_p "momentum 'reduces particles velocities as swarm runs' # s0_p "mometum 'Error : s1_h (structure component help), unknown s_Lab : mometum' # s0_p "n_weight 'Error : s1_h (structure component help), unknown s_Lab : n_weight' # "n_particles "E_CUTOFF "MAXV "MAXITER "momentum "max_runs "n_params "PSO_paramL "n_seeds "seedIndxL "seedParamL EACHBOTH s0_p (tell 11) IF flag_debug THEN write 'loading s0_w' ; ENDIF ; #] s0_w IS - write s0_, one format for showing a 2D data structure (table) s0_w IS { transpose mix s0_ } IF flag_debug THEN write 'loading s0_h - help, full list of structure [phrases, explanations]' ; ENDIF ; #] s0_h IS - help, full list of structure [phrases, explanations] s0_h IS { LOCAL a ; a := s0_w ; a|[,0 2] } # s0_p "winConfig "utils 'hell world' # deepupdate "winConfig (1 3) 9999 # s0_g "PuetzUWS_struct_std "PSO_paramL # s0_m IS OP sdat s_lab - apply internal method to structure # 22Aug2017 not yet started on this #***************************************************************** #] +-----+ #] s1_ - second of several [simple, real] 2D structures, for which avatars are used in apps # 16Jan2021 added IF flag_debug THEN write '+-----+' ; ENDIF ; IF flag_debug THEN write 's1_ - second of several [simple, real] 2D structures' ; ENDIF ; IF flag_debug THEN write 'loading s1_g' ; ENDIF ; #] s1_g IS OP s_lab - get component of structure s1_g IS OP s_Lab { LOCAL s_Lab_Indx ; NONLOCAL s1_ ; IF (isfault (s_Lab_Indx := find_Howell s_Lab s1_@0)) THEN fault (link 'Error : s1_g (structure get), unknown s_Lab : ' (string s_Lab)) ELSE s1_@@(1 s_Lab_Indx) ENDIF } IF flag_debug THEN write 'loading s1_p' ; ENDIF ; #] s1_p IS OP s_lab s_value - [put,change] component of structure s1_p IS OP s_lab s_value { LOCAL i s_label s_values ; NONLOCAL s1_ ; IF (isfault (indx := find_Howell s_Lab s1_@0)) THEN fault (link 'Error : s1_p (structure put), unknown s_Lab : ' (string s_Lab)) ELSE deepupdate "s1_ (1 indx) s_value ; ENDIF } IF flag_debug THEN write 'loading s1_w' ; ENDIF ; #] s1_w IS - write s1_, one of many formats for showing a 2D data structure (table) s1_w IS { transpose mix s1_ } IF flag_debug THEN write 'loading s1_h - help, full list of structure [phrases, explanations]' ; ENDIF ; #] s1_h IS - help, full list of structure [phrases, explanations] s1_h IS { LOCAL a ; a := s0_w ; a|[,0 2] } #***************************************************************** #] +-----+ #] s2_ - third of several [simple, real] 2D structures, for which avatars are used in apps # 16Jan2021 added IF flag_debug THEN write '+-----+' ; ENDIF ; IF flag_debug THEN write 's2_ - third of several [simple, real] 2D structures' ; ENDIF ; IF flag_debug THEN write 'loading s2_g' ; ENDIF ; #] s2_g IS OP s_lab - get component of structure s2_g IS OP s_Lab { LOCAL s_Lab_Indx ; NONLOCAL s2_ ; IF (isfault (s_Lab_Indx := find_Howell s_Lab s2_@0)) THEN fault (link 'Error : s2_g (structure get), unknown s_Lab : ' (string s_Lab)) ELSE s2_@@(1 s_Lab_Indx) ENDIF } IF flag_debug THEN write 'loading s2_p' ; ENDIF ; #] s2_p IS OP s_lab s_value - [put,change] component of structure s2_p IS OP s_lab s_value { LOCAL i s_label s_values ; NONLOCAL s2_ ; IF (isfault (indx := find_Howell s_Lab s2_@0)) THEN fault (link 'Error : s2_p (structure put), unknown s_Lab : ' (string s_Lab)) ELSE deepupdate "s2_ (1 indx) s_value ; ENDIF } IF flag_debug THEN write 'loading s2_w' ; ENDIF ; #] s2_w IS - write s2_, one format for showing a 2D data structure (table) s2_w IS { transpose mix s2_ } IF flag_debug THEN write 'loading s2_h - help, full list of structure [phrases, explanations]' ; ENDIF ; #] s2_h IS - help, full list of structure [phrases, explanations] s2_h IS { LOCAL a ; a := s0_w ; a|[,0 2] } #****************************** #] +-----+ #] General hierarchical tree structure (not developed fully) IF flag_debug THEN write '+-----+' ; ENDIF ; IF flag_debug THEN write 'General hierarchical tree structure (not developed fully)' ; ENDIF ; # sG_d IS OP s_rawLab { sraw } # 27Aug2017 There is no restructuring of s_raw # However - an intermediate form that is more efficient for searches is intended for some time in the future # A simple way of setting it up : # assign "var_name sraw # define tree struct - see lq_windowOps # You need BOTH "Type" and "Default Value" structs # see lq_windowOps example # this is very straightforward, albeit the structures can very complex IF flag_debug THEN write 'loading s_varsTypesAdd' ; ENDIF ; #] s_varsTypesAdd IS OP s_valuePhr s_TypePhr - general (tree) structure s_varsTypesAdd IS OP s_valuePhr s_TypePhr { NONLOCAL s_varsTypes ; s_varsTypes@0 := link s_varsTypes@0 s_valuePhr ; s_varsTypes@1 := link s_varsTypes@1 s_TypePhr ; } IF flag_debug THEN write 'loading SEQ_REST' ; ENDIF ; #] SEQ_REST IS OP f_A_Phr f_A_B_Phr A B - my screw-ups with transformers : SEQ_REST IS OP f_A_Phr f_A_B_Phr A B { LOCAL A_now B_list ; A_now := A ; B_list := null ; FOR i with TELL (gage shape A) DO B_list := B_list append (apply f_A_B_Phr (A_now B)) ; A_now := apply f_A_Phr A_now ; ENDFOR ; reverse B_list } # EACH first (SEQ_REST "front "reach (2 1 1) (value "winCompType)) IF flag_debug THEN write 'loading s_phrList_to_indx' ; ENDIF ; #] s_phrList_to_indx IS OP s_TypePhr s_labPhrList - s_phrList_to_indx IS OP s_TypePhr s_labPhrList { LOCAL i indx indxList s_labPhrKeys s_Type s_TypePhr s_TypeSubList ; s_TypeSubList := value s_TypePhr ; indxList := null ; FOR i WITH tell (gage shape s_labPhrList) DO IF = null (gage shape s_TypeSubList) THEN indxList := indxList link 0 ; EXIT 'OK' ; ENDIF ; s_labPhrKeys := EACH first s_TypeSubList ; indx := find_Howell s_labPhrList@i s_labPhrKeys ; IF isfault indx THEN EXIT fault '?sG_g - labelPhr not found in structure s_Phr' ; ELSE s_TypeSubList := first rest s_TypeSubList@indx ; indxList := indxList link indx ; ENDIF ; ENDFOR ; %write indxList (EACH first (SEQ_REST "front "reach indxList (value "winCompType) )) ; indxList } IF flag_debug THEN write 'loading sG_g' ; ENDIF ; #] sG_g IS OP s_Phr s_labPhrList - general form of simple s[.]_g for an hierarchical tree framework # sG_g IS OP s_structTypePhr s_Phr s_labPhrList # # Must define a type that describes this!! # 22Aug2017 09:17 sG_g IS OP s_Phr s_labPhrList { LOCAL indxList s_TypePhr ; NONLOCAL s_varsTypes ; s_TypePhr := sG_g s_varsTypes s_Phr ; indxList := s_phrList_to_indx s_TypePhr s_labPhrList ; reach indxList (value s_Phr) } IF flag_debug THEN write 'loading sG_gtests' ; ENDIF ; #] sG_g_tests IS - sG_g_tests IS { EACH write 'sG_g "winCompG "t_delay' (sG_g "winCompG "t_delay) ' ' 'sG_g "winCompG "posn' (sG_g "winCompG "posn) ' ' 'sG_g "winCompG ("posn "top)' (sG_g "winCompG ("posn "top)) ' ' 'sG_g "winCompG ("adjust "posn "left)' (sG_g "winCompG ("adjust "posn "left)) ; } IF flag_debug THEN write 'loading sG_p' ; ENDIF ; #] sG_p IS OP s_TypePhr s_Phr s_labPhrList s_value - # sG_p IS OP s_TypePhr s_Phr s_labPhrList s_value { LOCAL indxList s_TypePhr ; NONLOCAL s_varsTypes ; s_TypePhr := sG_g s_varsTypes s_Phr ; indxList := s_phrList_to_indx s_TypePhr s_labPhrList ; deepupdate s_Phr indxList s_value ; } IF flag_debug THEN write 'loading sG_ptests' ; ENDIF ; #] sG_p_tests IS sG_p_tests IS { EACH write 'sG_p "winCompG "t_delay 45.9' (sG_p "winCompG "t_delay 45.9) ' ' 'sG_p "winCompG "posn (1123 99)' (sG_p "winCompG "posn (1123 99)) ' ' 'sG_p "winCompG ("size "top) 232' (sG_p "winCompG ("size "top) 232) ' ' 'sG_p "winCompG ("adjust "posn "left) 69.69' (sG_p "winCompG ("adjust "posn "left) 69.69) ; winCompG } #******************************* #] +-----+ #] Playing around - perhaps for some time in the future IF flag_debug THEN write '+-----+' ; ENDIF ; IF flag_debug THEN write 'Playing around - perhaps for some time in the future' ; ENDIF ; IF flag_debug THEN write 'loading sgLab_' ; ENDIF ; #] sgLab_ IS OP winComp compLabSeq - perhaps for some time in the future sgLab_ IS OP winComp compLabSeq { result := 'get_winComponent : failed to get a value' ; IF (in compLabSeq (null "all)) THEN result := winComp ; ELSE depth_winComp depth_compLabSeq := EACH (gage shape) winComp compLabSeq ; IF depth_compLabSeq > depth_winComp THEN result := fault '?get_winComponent : depth_compLabSeq > depth_winComp' ; ELSE indexer := null ; FOR i with (tell depth_compLabSeq) DO indexer := indexer link find_Howell depth_compLabSeq@i depth_winComp@i ; IF isfault indexer THEN result := link '?fault ?get_winComponent : isfault indexer, i= ' (string i) ', depth_compLabSeq@i= ' (string depth_compLabSeq@i) ; ENDIF ; ENDFOR ; result := winComp@@(result) ; ENDIF ; ENDIF ; result } #************************* #] +-----+ #] Older approach - from several years before Aug2017, but I can't remember when # commented out IF flag_debug THEN write '+-----+' ; ENDIF ; IF flag_debug THEN write 'Older approach - from several years before Aug2017' ; ENDIF ; IF flag_debug THEN write 'loading struct_get_def' ; ENDIF ; #] struct_get_def IS OP struct_name component_name - get definition of structure struct_get_def IS OP struct_name component_name { names vals := value struct_name ; func val := vals@(find component_name names) ; val } IF flag_debug THEN write 'loading struct_get_many' ; ENDIF ; #] struct_get_many IS OP struct_name component_names - get many components of structure struct_get_many IS OP struct_name component_names { names vals := value struct_name ; funcs valss := flip vals#(component_names EACHLEFT find names) ; funcs EACHBOTH apply valss } IF flag_debug THEN write 'loading sp_' ; ENDIF ; #] sp_ IS OP struct_name component_name new_value - put value into structure sp_ IS OP struct_name component_name new_value { names vals := value struct_name ; location := find component_name names ; func val := vals@location ; IF func = "pass THEN deepupdate struct_name (1 location) ("pass new_value) ; ELSE assign val new_value ; ENDIF ; } IF flag_debug THEN write 'loading struct_help' ; ENDIF ; #] struct_help IS OP struct_name component_name - help message for structure # (should have definition of struct at least) # 07Aug2017 - later, for now simply type in structure's variable name! struct_help IS OP struct_name component_name { (find component_name (first value struct_name)) pick (struct_get struct_name "help) } IF flag_debug THEN write 'loading struct_get_deep' ; ENDIF ; #] struct_get_deep IS OP struct_name component_name component_path - struct_get_deep IS OP struct_name component_name component_path { apply [first, second] (reach (1 (find component_name (first value struct_name)) component_path) (value struct_name) ) ; } IF flag_debug THEN write 'loading struct_put_deep' ; ENDIF ; #] struct_put_deep IS OP struct_name component_name component_path new_value - untested!! struct_put_deep IS OP struct_name component_name component_path new_value { deepupdate struct_name (1 (find component_name (first value struct_name)) component_path) new_value ; } #********************************************** Examples # see the file lf IS loaddefs 'C:\Documents and Settings\William Neil Howell\My Documents\Qnial\MY_NDFS\Interpolation.ndf' # Note how text is used within "Interpolation.ndf" to "derive" current data & reference using slice operations This allows efficient accessing to indirect variable references eg: startYear_Index := find o (> t_interpolate (value link init_table_name '|[, 0]') ) ; loaddefs_ended f_struct ; # enddoc