Files
secondo/bin/Scripts/DACinSecondo.sec

43 lines
1.2 KiB
Plaintext
Raw Normal View History

2026-01-23 17:03:45 +08:00
# In this example, the order of tuples in relation Orte is reversed by a DAC algorithm. Initially, one task is created for each tuple in this relation. Then, in each step the number of tasks is halved, merging the tuple sets of two adjacent tasks, until just one task is left.
let Tasks = Orte feed addcounter[C, 1] nest[C; Tuples]
addcounter[D, 2] project[C, D, Tuples] consume
while (Tasks count) > 1 do
if ((Tasks count) mod 2) = 0 then
update Tasks :=
Tasks feed filter[(.C mod 2) = 1] remove[C]
Tasks feed remove[D] renameattr[Tuples2: Tuples]
mergejoin[D, C]
projectextend[; Tuples: .Tuples2 afeed .Tuples afeed concat aconsume]
addcounter[C, 1] addcounter[D, 2]
project[C, D, Tuples]
consume
else
update Tasks :=
Tasks feed head[1]
Tasks feed filter[(.D mod 2) = 1] remove[C]
Tasks feed remove[D] renameattr[Tuples2: Tuples]
mergejoin[D, C]
projectextend[; Tuples: .Tuples2 afeed .Tuples afeed concat aconsume]
addcounter[C, 2] addcounter[D, 3]
project[C, D, Tuples]
concat
consume
endif
endwhile
query Tasks feed unnest[Tuples] count