• ANN: Dogelog Player 1.3.6 (Canonical Compare)

    From Mild Shock@[email protected] to comp.lang.prolog on Thu Aug 21 15:44:28 2025
    From Newsgroup: comp.lang.prolog

    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
    --- Synchronet 3.21a-Linux NewsLink 1.2
  • From Mild Shock@[email protected] to comp.lang.prolog on Tue Sep 23 16:19:40 2025
    From Newsgroup: comp.lang.prolog


    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

    --- Synchronet 3.21a-Linux NewsLink 1.2
  • From Mild Shock@[email protected] to comp.lang.prolog on Thu Oct 2 14:05:07 2025
    From Newsgroup: comp.lang.prolog


    Dogelog Player is a Prolog system for the
    JavaScript, Python and Java platform. We
    recently ventured into cyclic terms, re-
    discovering Jaffar’s Unification for
    binary operations such as (==)/2, (=)/2,
    etc.. . Here we talk about unary operations
    such as term_variables/2, ground/2, etc..

    While we could already adopt a Peter Deutsch
    algorithm for the Dogelog Player garbage
    collection, freeing us from native stack
    constraints. For performance reasons of unary
    operations such as term_variables/2, ground/2,
    etc.. gap buffers known from Emacs showed up.

    See also:

    Gap Buffers for Dogelog Player
    https://medium.com/2989/bf3bc861ae04

    Mild Shock schrieb:

    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


    --- Synchronet 3.21a-Linux NewsLink 1.2