A simple python library for generating prolog terms
Project description
|PyPI|
prologterms - a python library for constructing prolog terms
============================================================
Example::
from prologterm import TermGenerator, PrologRenderer, Var
X = Var('X')
P = TermGenerator()
term = P.member(X, [1, 2, 3])
r = PrologRenderer()
print(r.render(term))
writes::
member(X, [1, 2, 3])
All prolog escaping conventions are handled
Rules
=====
The "<=" operator in python is overloaded to mean the same as prolog
":-". This means a rule object can be created as follows:
::
P.ancestor(X,Y) <= (P.parent(X,Z), P.ancestor(Z,Y))
This can be done more explicitly using a Rule constructor:
::
from prologterm import TermGenerator, PrologRenderer, Var, Rule
X = Var('X')
Y = Var('Y')
Z = Var('Z')
P = TermGenerator()
rule = Rule(P.ancestor(X,Y), (P.parent(X,Z), P.ancestor(Z,Y))
Usage
=====
This module is of little use by itself. It is intended to be used to
generate prolog programs that can be fed into a prolog execution
engine.
- write prolog programs and queries to a file, and load these using an engine like swi-prolog
- through web services, e.g. via pengines
Pengines
========
[Note: requires latest pengines which may not be on pypi]
One of the intended applications is pengines
::
from pengines.Builder import PengineBuilder
from pengines.Pengine import Pengine
from prologterms import TermGenerator, PrologRenderer, Program, Var
P = TermGenerator()
X = Var('X')
Y = Var('Y')
Z = Var('Z')
R = PrologRenderer()
p = Program(
P.ancestor(X,Y) <= (P.parent(X,Z), P.ancestor(Z,Y)),
P.ancestor(X,Y) <= P.parent(X,Y),
P.parent('a','b'),
P.parent('b','c'),
P.parent('c','d')
)
q = P.ancestor(X,Y)
factory = PengineBuilder(urlserver="http://localhost:4242",
srctext=R.render(p),
ask=R.render(q))
pengine = Pengine(builder=factory, debug=True)
while pengine.currentQuery.hasMore:
pengine.doNext(pengine.currentQuery)
for p in pengine.currentQuery.availProofs:
print('{} <- {}'.format(p[X.name], p[Y.name]))
prologterms - a python library for constructing prolog terms
============================================================
Example::
from prologterm import TermGenerator, PrologRenderer, Var
X = Var('X')
P = TermGenerator()
term = P.member(X, [1, 2, 3])
r = PrologRenderer()
print(r.render(term))
writes::
member(X, [1, 2, 3])
All prolog escaping conventions are handled
Rules
=====
The "<=" operator in python is overloaded to mean the same as prolog
":-". This means a rule object can be created as follows:
::
P.ancestor(X,Y) <= (P.parent(X,Z), P.ancestor(Z,Y))
This can be done more explicitly using a Rule constructor:
::
from prologterm import TermGenerator, PrologRenderer, Var, Rule
X = Var('X')
Y = Var('Y')
Z = Var('Z')
P = TermGenerator()
rule = Rule(P.ancestor(X,Y), (P.parent(X,Z), P.ancestor(Z,Y))
Usage
=====
This module is of little use by itself. It is intended to be used to
generate prolog programs that can be fed into a prolog execution
engine.
- write prolog programs and queries to a file, and load these using an engine like swi-prolog
- through web services, e.g. via pengines
Pengines
========
[Note: requires latest pengines which may not be on pypi]
One of the intended applications is pengines
::
from pengines.Builder import PengineBuilder
from pengines.Pengine import Pengine
from prologterms import TermGenerator, PrologRenderer, Program, Var
P = TermGenerator()
X = Var('X')
Y = Var('Y')
Z = Var('Z')
R = PrologRenderer()
p = Program(
P.ancestor(X,Y) <= (P.parent(X,Z), P.ancestor(Z,Y)),
P.ancestor(X,Y) <= P.parent(X,Y),
P.parent('a','b'),
P.parent('b','c'),
P.parent('c','d')
)
q = P.ancestor(X,Y)
factory = PengineBuilder(urlserver="http://localhost:4242",
srctext=R.render(p),
ask=R.render(q))
pengine = Pengine(builder=factory, debug=True)
while pengine.currentQuery.hasMore:
pengine.doNext(pengine.currentQuery)
for p in pengine.currentQuery.availProofs:
print('{} <- {}'.format(p[X.name], p[Y.name]))
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
prologterms-0.0.2.tar.gz
(3.6 kB
view hashes)
Built Distribution
Close
Hashes for prologterms-0.0.2-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | d4af26d0977b60562d6aa2afcdd69870acc3db0e77c7c8532c4e36f092b58450 |
|
MD5 | c12707ff3834f63e43a2d7bae01ac491 |
|
BLAKE2b-256 | 59fd682da6c1dd7ce1bad1dea055adc41868667646070db8e7c41ce84c7d1d2e |