In honor of today's relevant word, I have updated the example guesses used in this demonstration query.
dactal.org?queryname=Wo...
@dactal.org.bsky.social
A notional organization for an experimental query language.
In honor of today's relevant word, I have updated the example guesses used in this demonstration query.
dactal.org?queryname=Wo...
Yesterday's excellent tiny realization: subtractive traversal is a set-disjunction operation, but subtractive traversal with duplicates is itemwise removal.
...x=(1,1,2,2,3,3),y=(2)
.x,-y β 1,3
..x,y β 1,1,2,3,3
dactal.org/dactal.html?...
01.08.2025 19:13 β π 0 π 0 π¬ 0 π 0On one hand, we already know all the prime numbers below 1000.
On the other, here's the Sieve of Eratosthenes in a DACTAL query.
dactal.org/dactal.html?...
I give you your carets back. ^ and ^^ for comments have been replaced by ??? for notes, so ^ is no longer a reserved character.
??? your notes here
Notes in DACTAL are a null operation, not meta-text, which has some cool implications that I haven't thought of yet.
I moved the inline-math handling to a more sensible place in the resolution process, so now you can use it in traversal, grouping, sorting, or either form of annotation.
25.07.2025 15:41 β π 0 π 0 π¬ 0 π 0Realized and fixed an early-implementation laziness that evaluated :x=y as :(.x:@1:=y) instead of :(.x:=y)
23.07.2025 18:07 β π 0 π 0 π¬ 0 π 0One of my guesses today revealed a bug in this. Gotta use ".." instead of "." in the parse routine to preserve duplicate letter/color pairs in the guess! Here's the difference:
dactal.org/dactal.html?...
Oh look, a Wordle solver that fits (kinda) in a URL.
dactal.org/dactal.html?...
listening sample....pairs ||px=@, clock=(....(.pair.ts),timediff); this<pair; px=(this.px); clock=(this.clock); silence=[=clock-ms_played]; restart=(.silence:>60000); .(.pair:px=1,@2)/@@restart
To go with /@x, which groups consecutive sequences with shared x properties, you can now also do /@@y to group sequences that start with each occurrence of y.
E.g grouping streams into listening sessions broken by gaps of more than 10 minutes between songs:
Realized that the recently-added |x@ shortcut, for annotating a list of items with their list indexes, was actually the beginning of the missing feature for doing running ranks/counts/totals.
e.g. cumulative duration:
tracks2||cumulative duration=@@duration
dactal.org/dactal.html#...
That version didn't account for repeat letters correctly. This one might.
05.07.2025 03:41 β π 0 π 0 π¬ 0 π 0Huh, worked out the Wordle logic in DACTAL form.
04.07.2025 21:29 β π 1 π 0 π¬ 1 π 0The new ?? label operation has the same labeling options as a ? start operation, but relative to, and without changing, the current list:
tracks|others=(??this .artist.tracks:-(this))
This replaces the more limited special-casing of "=_" in starts:
tracks|others=(?this=_ .artist.tracks:-(this))
Recent minor enhancements for control:
+ and - in sort operations explicitly specify numeric sort-direction
~ in sort keys specifies strict literal sort-order
; in aggregations specifies aggregators (over properties with the same name)
Also, reverse index-number filtering is now @@, instead of @-, so getting the last 10 items is
:@@<=10
instead of the weird looking
:@-<=10
which also means getting everything but the last 10 can be
:-@@<=10
or, of course,
:@@>10
Today in obsessive buffing of rough spots:
Filter negation is now done with -, instead of !.
tracks:-=Amaranth
This was the only use of ! as a suboperator, which frees it up to be the repeat operator, instead of ??.
messages._,replies!
Today's tiny DACTAL tweak that probably affects nobody: in an aggregation, semicolons explicitly identify aggregators. So this query is a count of counts; the first "count" is a property (of groups), the second "count" is the aggregator.
tracks/artist...count;count
And, although I strongly suspect the audience for this additional note is 0, I did make one breaking change: the looping operator now repeats the preceeding operation, rather than repeating the subquery it appears in. So anything you had that did
??)
should now instead do
)??
There have been many small improvements to DACTAL recently, all of them described in the also-much-improved interactive manual at dactal.org.
12.06.2025 18:33 β π 0 π 0 π¬ 1 π 0dactal.org now starts with a little explanation of what this is before cannonballing into the syntax.
13.03.2025 18:29 β π 0 π 0 π¬ 0 π 0