Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.javascript > #124407

Jaffar's Unification in Dogelog Player (Re: ANN: Dogelog Player 1.3.6 (Canonical Compare))

From Mild Shock <janburse@fastmail.fm>
Newsgroups comp.lang.javascript
Subject Jaffar's Unification in Dogelog Player (Re: ANN: Dogelog Player 1.3.6 (Canonical Compare))
Date 2025-09-23 16:21 +0200
Message-ID <10auacq$qjhg$2@solani.org> (permalink)
References <10877t8$cm50$3@solani.org>

Show all headers | View raw


We are currently in our third iteration of
unification for rational trees. What first
begun as a separate routine inside library(math),
has now recently become a novel take on the
host language routine unify() inside the
Dogelog Player Prolog system.

We report how we replaced the union find map
data structure inside unify() by some Prolog
compound pointer swizzling as suggested by Jaxon
Jaffar in 1984, arriving at a more competetive
rational tree unification realization.

Jaxon Jaffar (1984) already proposed Hydra test
cases. They take very less memory but are very
large when written. We conducted according tests
with Dogelog Player and Scryer Prolog. For
N = 16'384, 65'536, 261'144 the Rust Prolog

has a minor advantage over the JavaScript Prolog,
but interestingly losing it for N = 1'048'576.

See also:

Jaffar's Unification in Dogelog Player
https://qiita.com/j4n_bur53/items/b0b754f02d88680d3249

Mild Shock schrieb:
> Dear All,
> 
> We are happy to announce a new edition
> of the Dogelog Player:
> 
> - Frozen Terms:
> We extended our garbage collector marking bits
> to Prolog compounds. Unlike Prolog variables, where
> setting all bits is used to indicate change set
> membership, we use it to indicate frozen objects.
> This makes the garbage collector and certain
> built-ins such as copy_term/2 etc.. aware of
> program sharing (PS).
> 
> - Marking Algorithms:
> We now provide native implementations of (==)/2,
> copy_term/2, etc.. with sharing and cycle detection.
> We didn't deploy additional marking bits and/or
> pointers inside the Prolog terms, instead used
> additional datastructures, leaving the Prolog terms
> untouched. The compare/3 implementation is
> not a total order.
> 
> - Canonical Compare:
> The library(lists) has experimental predicates
> term_decompose/3 and term_canonical/2, still written
> in 100% Prolog. We showcase their usage in
> library(sequence) and library(aggregate). The end-
> user gets by default a structure compare, but can
> also have a canonical compare, both being
> total and natural orders.
> 
> Have Fun!
> 
> Jan Burse, http://www.herbrand.ai/ , 21.08.2025

Back to comp.lang.javascript | Previous | NextPrevious in thread | Next in thread | Find similar


Thread

ANN: Dogelog Player 1.3.6 (Canonical Compare) Mild Shock <janburse@fastmail.fm> - 2025-08-21 15:45 +0200
  Jaffar's Unification in Dogelog Player (Re: ANN: Dogelog Player 1.3.6 (Canonical Compare)) Mild Shock <janburse@fastmail.fm> - 2025-09-23 16:21 +0200
    Gap Buffers for Dogelog Player (Re: Jaffar's Unification in Dogelog Player) Mild Shock <janburse@fastmail.fm> - 2025-10-02 14:09 +0200

csiph-web