• Porting Railgun CLP(FD) to SWI-Prolog (Re: Lean CLP for Dogelog Player)

    From Mild Shock@janburse@fastmail.fm to comp.lang.javascript on Sun Jan 11 23:07:05 2026
    From Newsgroup: comp.lang.javascript


    We recently presented a fast constraint solver
    termed Railgun CLP(FD) that modelled attributed
    variables simply via rCy$ATTRrCO/2 compounds and could
    deal with integer dif/2 constraints. In this
    instalment we allow (#\=)2 constraints and demonstrate
    that it can be ported to SWI-Prolog.

    Using polyfill for rCy$SEQrCO/2 from Dogelog Player,
    we observed that running Railgun CLP(FD) inside
    SWI-Prolog gives a 2rCo3x speed-up for the Queens
    example, on both 32-bit and 64-bit. On the other
    hand the price tag for big integer flexibility
    seems to be a factor 35x slow down.

    See also:

    Porting Railgun CLP(FD) to SWI-Prolog
    https://medium.com/2989/e9f2ef4e6878

    Mild Shock schrieb:

    Hi,

    Many existing and evolving constraint logic
    programming projects resemble some ancient
    invention of gunpowder. For example SWI-Prologs
    9.3.35 corouting for delayed goals is mainly
    based on unify hooks. We show how verify hooks,
    already used in formerly Jekejeke Prolog, can
    be braught to Dogelog Player in a 100% Prolog fashion.

    Since the recent version of Dogelog Player
    supports cyclic terms, we could let the Jini
    out of the bottle, and provide the experimental
    library(edge/railgun) to model delayed goals with
    nothing else than Alain Colmerauers rational trees.
    The result is a Lean CLP of ca. 100 lines of code,
    that already provides a simple constraint (#\=)/2
    and a global constraint all_different/1.

    The results are encouraging. For problems that
    are not over constrained, Dogelog Player leaves
    existing Prolog systems clearly behind, showing
    a 2-3x times speed-up against SWI-Prolog and a
    20-30x times speed-up against Trealla Prolog.
    For more constrained problems we suggest ommiting
    forward checking in favor of a form of ahead of
    time (AOT) variable ordering. With this approach
    and for Sudoku problems we are then in the midfield
    between SWI-Prolog and Trealla Prolog.

    Bye

    See also:

    Lean CLP for Dogelog Player https://qiita.com/j4n_bur53/items/addf1fc86856dd682dcb
    --- Synchronet 3.21a-Linux NewsLink 1.2