ANN: Dogelog Runtime, Prolog to the Moon (2021)

Mostowski Collapse bursejan at gmail.com
Sun Sep 19 16:02:31 EDT 2021


Also I nowhere wrote that I would use doubly-linked list or 
a set of objects. The trail is neither, its a single linked list. I 
also refer directly to objects, I do not need the trail to refer 

to objects. The Prolog trail is only a logbook. The Prolog trail 
has similarity to a database log:

transaction journal, database log, binary log or audit **trail**
https://en.wikipedia.org/wiki/Transaction_log

Do you say Python should not be used to implement
such things? In my opinion, Python has a high potential
to implement Prolog, because it has also ast.parse()

and compile(). But I do not yet have a showcase that uses
these features of Python to compile Prolog. I dont work 24/7
and I cannot clone myself. Currently the Prolog code is interpreted. 

I have a prototype where Prolog code is compiled into JavaScript, 
but I did not yet try this approach with Python. Here you see how 
JavaScript closures are generated, a first prototype:

const alt4 = make_defined([new Clause(1, [0, 0], function(
   display, actual, cont) {return(new Compound(".", [new Compound(
      "==", [deref(actual.args[0]), "end_of_file"]), new Compound(
      ".", [new Compound("$CUT", [deref(display[0])]), cont
      ])]))}, 0, undefined), new Clause(1, [0, 0], function(
   display, actual, cont) {return(new Compound(".", [new Compound(
      "expand_include", [deref(actual.args[0]), deref(actual.args[1]
      ), display[0] = new Variable()]), new Compound(".",
      [new Compound("handle_term", [deref(display[0])]), new Compound(
      ".", ["fail", cont])])]))}, -1, undefined)]);

add("next_term", 1, new Clause(2, [0], function(display, actual,
   cont) {return(new Compound(".", [new Compound("read_term",
      [deref(actual.args[0]), display[0] = new Variable(),
      new Compound(".", [new Compound("variable_names", [
      display[1] = new Variable()]), "[]"])]), new Compound(
      ".", [new Compound(alt4, [deref(display[0]), deref(
      display[1])]), cont])]))}, -1, undefined));

https://github.com/jburse/dogelog-moon/issues/184

Will do the same for Python in the next weeks. Then later this approach 
will be combined with a few planned  optimizations. So far got a 25% 
speed increase for JavaScript with this new compilation scheme, but

there is no official release out yet, that features this approach. And 
there should be much more in it, also for Python.

Mostowski Collapse schrieb am Sonntag, 19. September 2021 um 21:46:20 UTC+2:
> sympy also builds a language on top of Python. 
> pandas also builds a language on top of Python. 
> 
> Is there some pope that says this wouldn't be 
> allowed, I dont think so, otherwise sympy, pandas, etc.. 
> 
> wouldn't exist. I dont understand your argument. 
> 
> Chris Angelico schrieb:
> > On Mon, Sep 20, 2021 at 3:19 AM Mostowski Collapse <janb... at fastmail.fm> wrote: 
> >> 
> >> I am refering to: 
> >> 
> >> Greg Ewing schrieb: 
> >> > where [w] is a weak reference object. Then you could periodically 
> >> > scan the trail looking for dead weakref objects and remove the 
> >> > corresponding [*] node from the list. 
> >> > 
> >> > You can also attach callbacks to weakref objects that are triggered 
> >> > when the referenced object dies. You might be able to make use of 
> >> > that to remove items from the trail instead of the periodic scanning. 
> >> 
> >> Question to Chris Angelico: If I stay with my 
> >> sweep_trail(), which is the periodically scanning, 
> >> I can use a single linked list. 
> >> 
> >> On the other hand if I would use the trigger 
> >> from Python, I possibly would need a double linked 
> >> list, to remove an element. 
> >> 
> >> Chris Angelico, is there a third option, that I have 
> >> overlooked? Single linked list uses less space 
> >> than double linked list, this why I go with scan. 
> >> 
> > 
> > I don't know. I don't understand your code well enough to offer advice 
> > like that, because *your code is too complicated* and not nearly clear 
> > enough. 
> > 
> > But however it is that you're doing things, the best way is almost 
> > always to directly refer to objects. Don't fiddle around with creating 
> > your own concept of a doubly-linked list and a set of objects; just 
> > refer directly to the objects. Let Python be Python, don't try to 
> > build your own language on top of it. 
> > 
> > ChrisA 
> >


More information about the Python-list mailing list