Path: csiph.com!weretis.net!feeder8.news.weretis.net!reader5.news.weretis.net!news.solani.org!.POSTED!not-for-mail From: Mild Shock Newsgroups: comp.lang.python Subject: Program Sharing in Dogelog Player (Was: ANN: Dogelog Player 1.3.5 (Cyclic Terms)) Date: Wed, 20 Aug 2025 15:11:39 +0200 Message-ID: <1084hi9$b2pf$1@solani.org> References: <106l4o4$366q0$2@solani.org> <107nsb1$3cc5$2@solani.org> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit Injection-Date: Wed, 20 Aug 2025 13:11:37 -0000 (UTC) Injection-Info: solani.org; logging-data="363311"; mail-complaints-to="abuse@news.solani.org" User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:128.0) Gecko/20100101 Firefox/128.0 SeaMonkey/2.53.21 Cancel-Lock: sha1:LuyqZXHJ9GliWnui+DmAOi9pLwI= In-Reply-To: <107nsb1$3cc5$2@solani.org> X-User-ID: eJwNxsEBwCAIA8CVCpJQxhE0+4/Q3uuwaJwMggFBeV75Lr8G0aFTbsm4uOUbhLesh2EFzpiy1P1sRWv9uR9O9BX7 Xref: csiph.com comp.lang.python:197535 Dogelog Player is a Prolog system for the targets JavaScript, Python and Java. It is a mongrel, half formerly Jekejeke Prolog and half X-Prolog ZIP. Concerning program sharing (PS) it offers a compromise between full sharing in Jekejeke Prolog and no-sharing in X-Prolog ZIP. Without extra syntax like tuple (x1,..,xn) versus list [x1,..,xn] we now have frozen Prolog terms in Dogelog Player. They are beneficial for the garbage collector and provide safer mutations. Regression testing shows that our compilation schemes don’t affect the runtime. See also: Program Sharing in Dogelog Player https://medium.com/@janburse_2989/7b0d9d13cc6f Mild Shock schrieb: > > Dogelog Player is a Prolog system written > in 100% Prolog for the target platforms JavaScript, > Python and Java. We recently introduced the > display of cyclic terms in the top-level. > > As a next iteration we turned all built-ins > upside down, gave it either a visitor pattern > or union find, so that they can deal with cyclic > terms. The final step is then to untie Landin's Knot. > > The new predicates term_decompose/2 and > term_canonical/2 have found applications in > library(sequence) and library(aggregate). The > result is primarily a structural compare among > > cyclic terms, which the end-user can lift > to a canonical compare. > > See also: > > Landin's Knot in Dogelog Player > https://qiita.com/j4n_bur53/items/f096445f959998768316 > > Mild Shock schrieb: >> Dear All, >> >> We are happy to announce a new edition >> of the Dogelog player: >> >> - Enhanced Core: >> We provide internally unify_cyclic() which implements >> Hopcroft & Karp (1971) algorithm and can deal with >> cyclic terms. It is accessible via the built-in >> predicate (=)/2 and also used by the Prolog interpreter >> for solving clauses. Similar there is an enhanced >> (==)/2 available to the end-user. >> >> - Enhanced library(tools): >> The debugger is now cyclic term aware and uses a term >> factoring based on a new same_term/2 before printing >> a goal. The display is simply a conjunction Equation_1, >> .., Equation_n, Goal, where the equations are necessary >> to break cycles. As before Prolog variables are still >> printed by their serial number. >> >> - Enhanced library(session): >> The answer display is now cyclic term aware and uses >> the same term factoring as the debugger. Answer >> substitutions and cycle breaking equations are >> interspersed. We tried hard to not break old features, >> such as fresh singleton variable names, fresh multiton >> variable names and marked variables suppression. >> >> Have Fun! >> >> Jan Burse, https://www.herbrand.ai/ , 02.08.2025 >