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
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
Sysop: | DaiTengu |
---|---|
Location: | Appleton, WI |
Users: | 1,064 |
Nodes: | 10 (0 / 10) |
Uptime: | 148:03:34 |
Calls: | 13,691 |
Calls today: | 1 |
Files: | 186,936 |
D/L today: |
33 files (6,120K bytes) |
Messages: | 2,410,932 |