Their implementation approach is interesting: they have their own custom Forth implementation, with a kernel written in assembly language (ARM, aarch64, x86_64 and ppc64le). Then Strand is written in a mixture of Forth and itself.
A sample from their user manual[0]:<p><pre><code> % print even numbers between 1 and 10
main :- count(1).
count(11).
count(N) :- N =< 10 | even(N), N2 is N + 1, count(N2).
even(N) :- M is N \\ 2, even(M, N).
even(0, N) :- writeln(N).
even(_, _) :- otherwise | true.
</code></pre>
[0] <a href="http://www.call-with-current-continuation.org/strand/MANUAL" rel="nofollow">http://www.call-with-current-continuation.org/strand/MANUAL</a>
From the same author, and in the same family of languages, is FLENG: <a href="http://www.call-with-current-continuation.org/fleng/fleng.html" rel="nofollow">http://www.call-with-current-continuation.org/fleng/fleng.ht...</a><p>It lacks Strand's distributed features but includes prolog's unification.
I wasn't involved, but I remember considerable interest in Strand from parallel programming people in the lab about the time it appeared. I don't think that lasted long, but unfortunately I don't remember why it failed (if I knew then).<p>SISAL was probably a better bet as a dataflow-ish language, but I don't remember anyone else looking at it, despite Manchester being "just" down the road.
No idea if related in any meaningful way, but <a href="https://github.com/rust-lang/chalk/tree/master/chalk-engine/src" rel="nofollow">https://github.com/rust-lang/chalk/tree/master/chalk-engine/...</a> (a "PROLOG-like logic solver" for the Rust trait system) also makes use of "strands"
A good introduction to concurrent logic languages:<p>Parlog86 and the dining logicians
G. A. Ringwood
Communications of the ACM
January 1988
<a href="https://doi.org/10.1145/35043.35044" rel="nofollow">https://doi.org/10.1145/35043.35044</a><p><a href="https://dl.acm.org/doi/10.1145/35043.35044" rel="nofollow">https://dl.acm.org/doi/10.1145/35043.35044</a>