Closed m-michurov closed 8 months ago
Пример:
import c_init( name, int) as init; import c_print( value) as print; sub init_1(name arr, int ind) { init(arr[ind], 0); } sub init_2(name arr, int ind) { init(arr[ind], 1); } sub main() { df x; for i = 0..1250 { init_1(x, 2*i); print(x[2*i]) @{ delete x[2*i]; }; init_2(x, 2*i+1); print(x[2*i+1]) @{ delete x[2*i+1]; }; } }
Вывод обхода: (тут [8, 9] - идентификаторы выражений в теле main, а [7] - начальный стек вызовов (идентификатор main))
?- walk([8, 9], aliases{}, [7]). > Loop "for" with "LUNA_i" from 0 to 1250 (body aliases: _984{'LUNA_i':"Var9_7__LUNA_i",'LUNA_x':"Var7__LUNA_x"}) "7:211:main -> 9:297:for" > Calling "init_1" (struct) with args aliases{'LUNA_arr':"Var7__LUNA_x",'LUNA_ind':["*",2,"Var9_7__LUNA_i"]} "7:211:main -> 9:297:for -> 11:323:init_1" > Calling "init" (extern) with args [luna_ref(["Var7__LUNA_x",["*",2,"Var9_7__LUNA_i"]]),0] "7:211:main -> 9:297:for -> 11:323:init_1 -> 3:110:init" true ; > Calling "init_2" (struct) with args aliases{'LUNA_arr':"Var7__LUNA_x",'LUNA_ind':["+",["*",2,"Var9_7__LUNA_i"],1]} "7:211:main -> 9:297:for -> 13:430:init_2" > Calling "init" (extern) with args [luna_ref(["Var7__LUNA_x",["+",["*",2,"Var9_7__LUNA_i"],1]]),1] "7:211:main -> 9:297:for -> 13:430:init_2 -> 6:189:init" true ; > Calling "print" (extern) with args [luna_ref(["Var7__LUNA_x",["*",2,"Var9_7__LUNA_i"]])] "7:211:main -> 9:297:for -> 12:351:print" true ; > Calling "print" (extern) with args [luna_ref(["Var7__LUNA_x",["+",["*",2,"Var9_7__LUNA_i"],1]])] "7:211:main -> 9:297:for -> 14:456:print" true ; false.
Пример:
Вывод обхода: (тут [8, 9] - идентификаторы выражений в теле main, а [7] - начальный стек вызовов (идентификатор main))