Discussion:
ANN: Dogelog Player 1.1.6 (HTTP Client)
Add Reply
Mild Shock
2024-03-10 18:10:28 UTC
Reply
Permalink
Dogelog Player is a Prolog system that is 100% written
in Prolog itself. It is avsailable for the JavaScript,
Python and Java platform. We show how the stable
ordering of Prolog variables in Dogelog Player allows
highly efficient constraint solving approaches.

We convert the undirected graph into a directed graph
and create adjacency lists. This inequality graph doesn’t
have the same delayed evaluation overhead than
(#=)/2 and dif/2. We demonstrate map coloring and
sudoku solving. Further improvements in a
subsequent article.

See also:

Map Coloring and Sudoku Solving
https://twitter.com/dogelogch/status/1766885890712883276

Map Coloring and Sudoku Solving
https://www.facebook.com/groups/dogelog
Dear All,
We are happy to announce a new edition
  Previously the '$YIELD'/1 instruction was hard coded
to understand an integer for sleep/1 and an atom for
native library loading. The implementation has been
change to accept a Promise object, known from
JavaScript. Emulations were made available for
Java and Python.
  Based on the new '$YIELD'/1 and a buffer fast path
idea, the console reading, file property and file
reading have been asyncified. There is no change in
the Prolog API, files are still to be opened via the
ISO core open/3 and accessed via ISO core get_code/2
respectively ISO core peek_code/2. But input can now
be executed quasi-parallel by multiple tasks.
  The ISO core open/4 has been moved to the library(spin).
The support of the HTTP and HTTPS protocol in open/3
and open/4, has been extended from the JavaScript
browser to the JavaScript command line (by means of
new fetch in nodejs >21). Further supported targets
are now Python and Java (by means of new HTTP client
in JDK >21).
Have Fun!
Jan Burse, http://www.xlog.ch/ , 07.03.2024
Mild Shock
2024-03-10 22:50:05 UTC
Reply
Permalink
Small implementation node about the new HTTP client
in Dogelog Player for JavaScript. I am using fetch()
Axios is a promise-based HTTP Client for node.js
and the browser. It is isomorphic (= it can run in
the browser and nodejs with the same codebase).
On the server-side it uses the native node.js http
module, while on the client (browser) it uses XMLHttpRequests.
https://axios-http.com/docs/intro

First of all XMLHttpRequests is deprecated in the
browser, use fetch() instead. And nodejs has fetch()
since release 21.x.x as well. So they have become
Notable Changes - Oct 17, 2023
The recent update to Node.js, version 21, includes
an important change to the fetch module as well as
WebStreams . Both modules were marked as stable
after a recent update.
https://nodejs.org/en/blog/announcements/v21-release-announce
Dogelog Player is a Prolog system that is 100% written
in Prolog itself. It is avsailable for the JavaScript,
Python and Java platform. We show how the stable
ordering of Prolog variables in Dogelog Player allows
highly efficient constraint solving approaches.
We convert the undirected graph into a directed graph
and create adjacency lists. This inequality graph doesn’t
have the same delayed evaluation overhead than
(#=)/2 and dif/2. We demonstrate map coloring and
sudoku solving. Further improvements in a
subsequent article.
Map Coloring and Sudoku Solving
https://twitter.com/dogelogch/status/1766885890712883276
Map Coloring and Sudoku Solving
https://www.facebook.com/groups/dogelog
Dear All,
We are happy to announce a new edition
   Previously the '$YIELD'/1 instruction was hard coded
to understand an integer for sleep/1 and an atom for
native library loading. The implementation has been
change to accept a Promise object, known from
JavaScript. Emulations were made available for
Java and Python.
   Based on the new '$YIELD'/1 and a buffer fast path
idea, the console reading, file property and file
reading have been asyncified. There is no change in
the Prolog API, files are still to be opened via the
ISO core open/3 and accessed via ISO core get_code/2
respectively ISO core peek_code/2. But input can now
be executed quasi-parallel by multiple tasks.
   The ISO core open/4 has been moved to the library(spin).
The support of the HTTP and HTTPS protocol in open/3
and open/4, has been extended from the JavaScript
browser to the JavaScript command line (by means of
new fetch in nodejs >21). Further supported targets
are now Python and Java (by means of new HTTP client
in JDK >21).
Have Fun!
Jan Burse, http://www.xlog.ch/ , 07.03.2024
Mild Shock
2024-03-13 01:03:57 UTC
Reply
Permalink
In 1997, Hong Kong judge Wayne Gould saw a partly
completed puzzle in a Japanese bookshop. Over six years,
he developed a computer program to produce unique
puzzles rapidly. The program tries to keep one puzzle
ahead of you, by generating the next puzzle while you
are solving the present one.

In the following we show a Prolog program, where
the random generation of a Puzzle is performed in
less than 2 seconds. The Prolog program was mainly
developed for Dogelog Player. We could test the
Prolog program also with Prolog systems such as
SWI-Prolog, Scryer Prolog and Trealla Prolog.

The smallest domain first variable ordering heuristic
allowed us to solve some hard problems below a minute.
Turning the heuristic into a static ordering before
search gave us a further boost and the baseline for
randomization. Measurement showed that solving blank
Sudokus doesn't have a large time variation.

See also:

Birthday Paradox and Sudoku Generation
https://twitter.com/dogelogch/status/1767714755827908991

Birthday Paradox and Sudoku Generation
https://www.facebook.com/groups/dogelog
Mild Shock
2024-03-23 15:42:51 UTC
Reply
Permalink
Dogelog Player is a Prolog system that features
a generational garbage collector scheme and a
change_arg/3 primitive built-in. So far the two
didn’t go together and we had to use a cludge.
With the upcoming release we provide a proper
solution based on marking write-barriers.

Our remembered set on the variable binding trail
has the benefit that it can reduce itself during
backtracking. By adopting conductor variables, i.e.
instantiated variables that are not trailed, from
formerly Jekejeke Prolog, we could recreate a
similar benefit for Dogelog Players change_arg/3.

See also:

Marking Write-Barriers for Dogelog Player
https://twitter.com/dogelogch/status/1771559896741192186

Marking Write-Barriers for Dogelog Player
https://www.facebook.com/groups/dogelog
Mild Shock
2024-04-01 23:19:41 UTC
Reply
Permalink
Starting with the Sudoku solver we have recently
obtained we developed a Puzzle generator together
with an interactive game play. The result can be
run in a web page by means of Dogelog Player 1.2.0
for JavaScript. Both the Puzzle generator and the
game play were written in 100% Prolog.

Regin Filtering from SWI-Prolog CLP(FD) didn’t
make a dent for generating unique puzzles, all we
could do was provide 34 clues, and our solver takes
in the average 1000 ms. We also implemented valid
move checking by reusing the constraints and an undo
move queue via dynamic facts.

See also:

Game Play of Spock Doku
https://twitter.com/dogelogch/status/1774936304335159561

Game Play of Spock Doku
https://www.facebook.com/groups/dogelog
Post by Mild Shock
Dogelog Player is a Prolog system that features
a generational garbage collector scheme and a
change_arg/3 primitive built-in. So far the two
didn’t go together and we had to use a cludge.
With the upcoming release we provide a proper
solution based on marking write-barriers.
Our remembered set on the variable binding trail
has the benefit that it can reduce itself during
backtracking. By adopting conductor variables, i.e.
instantiated variables that are not trailed, from
formerly Jekejeke Prolog, we could recreate a
similar benefit for Dogelog Players change_arg/3.
Marking Write-Barriers for Dogelog Player
https://twitter.com/dogelogch/status/1771559896741192186
Marking Write-Barriers for Dogelog Player
https://www.facebook.com/groups/dogelog
Loading...