Wypróbuj sam  ·  Operator sum

Dwa zegary.
Jeden strumień, wyrównany.

Podaj dwa ciągi oraz odstęp między kolejnymi elementami każdego z nich (jako liczbę wymierną, np. 2/3, lub dziesiętną, np. 0.5). Operator wyrównuje je do połączonego odstępu Δc = min(Δ1, Δ2), parując każdy takt szybszego strumienia z odpowiadającym mu taktem wolniejszego.

Δc = min(Δ1, Δ2)  ·  RQL: FROM core0+core1
Jak to działa

Tempo nadaje szybszy zegar

Sum zestawia dwa regularne strumienie obok siebie. Wynik tyka tak często jak szybsze wejście; każdy jego takt niesie bieżącą wartość obu wejść.

Prowadzenie

Odstęp wyjściowy jest krótszym z dwóch, Δc = min(Δ1, Δ2). Każdy element szybszego strumienia pojawia się dokładnie raz, w kolejności.

Podtrzymanie

Wolniejszy strumień jest odczytywany w odpowiadającym takcie, więc jego wartość powtarza się aż do nadejścia kolejnego elementu — bez interpolacji, bez zgadywania.

Dokładność

Odpowiadający takt to całkowita podłoga z ilorazu wymiernych odstępów. Dla dowolnej pary regularnych odstępów parowanie jest takie samo przy każdym uruchomieniu, co do bitu.

RQL w praktyce

Ten sam operator w zapytaniu

W RQL sum zapisuje się jako + między dwoma strumieniami. Tutaj core0 tyka co 1/10, a core1 co 1/5, więc str1 tyka co 1/10.

query.rql test/IntegrationTest/simple
STORAGE 'temp'
DECLARE a INTEGER STREAM core0, 0.1 FILE 'datafile2.dat'
DECLARE b INTEGER STREAM core1, 0.2 FILE 'datafile3.dat'
SELECT str1[0]*10,str1[1]*10,str1[1]*str1[0]+20 STREAM str1 FROM core0+core1

Formalna definicja i dowód znajdują się w artykule. Pełne zapytanie, plan i krotki wyjściowe są na stronie głównej.