DACTAL.org

@dactal.org

A notional organization for an experimental query language.

I'm very actively undecided about how I think AI should be used to write code, or really at all, but if you're having AI write apps for you, and want to try having it write them so that their data and algorithms are open to inspection, here's an AI-written Skill for that. dactal.org/dactal.html?...

Extensions are accumulating. Here's a geo adapter feeding into a weather adapter feeding into a map renderer. Europe .search countries .weather forecast |temp=(.history@1.temperature_2m_max) ...map=(...colorField=temp,width=700,height=700) |data-of

Bild

I've made some changes that are either exciting or too geeky to comprehend, depending on how geeky you are. I'll post about them, but if you have any trouble in the meantime, you can use dactal1.js to keep using the previous version.

Structurally tiny but useful addition. Inverting a graph arc can now be done like this: .inverse name>forward property E.g., in data where each album has track objects, but the tracks don't refer back to their album: .album>tracks adds an "album" property to each track while traversing.

Tiny additions. Filtering items that have any, or no, values for a property can now be done with: :property+ :property- as shorthand for the subquery forms: :(.property) :-(.property) But the subquery forms are still needed for any path more complicated than a single property.

I should pretend I designed this feature intentionally, but in reality I just realized that because something/someprop.10 gives us the first 10 items from each group, you can also truncate each group to 10 items in place, like this: something/someprop|of=10

This may not interest you until you suddenly hit a case where you need it, but you can now short-circuit a traverse operation when it gets its first results, like this: some data.<(.some expensive subquery) instead of running the subquery N times only to throw away N-1 of the results.

A start/labeling operation can append to the existing list with ?label=+(subquery) ??label=+(subquery) And a start operation can use the value ONLY as a reference with =label =type Thus this form for setting a label if it isn't already set: ??district size=(=district size;~1000)

Sometimes you want (or just need) the results of another query in the middle of the one you're writing. Highlight the subquery and hit Command-U to unpack it.

Saved relative queries let you encapsulate complexity, like AEIODLT .possible words .by added letter And now you can decapsulate it again with command-I (for Inline).

If anybody can vibe-code embryonic ideas into slick apps, we're gonna get a lot of slick apps sealed airlessly around ideas that never got a chance to become. I want the opposite of that, unslick explorers of exposed exologic. We only start at the beginning. dactal.org/Scrabble.html

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

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.