python support

This commit is contained in:
Vitor Santos Costa
2017-05-27 22:54:00 +01:00
parent 25a2b68b15
commit 0c46c894d3
46 changed files with 273711 additions and 118760 deletions

View File

@@ -72,13 +72,17 @@ add_custom_target( YAP4PY ALL
COMMAND ${CMAKE_COMMAND} -E copy ${pl_os_library} ${CMAKE_CURRENT_BINARY_DIR}/yap4py/prolog/os
COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/setup.py sdist bdist_wheel
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
DEPENDS STARTUP ${dlls} ${PYTHON_SOURCES} ${PROLOG_SOURCES} ${CMAKE_CURRENT_BINARY_DIR}/setup.py ${SWIG_MODULE_Py2YAP_REAL_NAME} )
DEPENDS STARTUP ${dlls} ${PYTHON_SOURCES} ${PROLOG_SOURCES} ${CMAKE_CURRENT_BINARY_DIR}/setup.py ${SWIG_MODULE_Py2YAP_REAL_NAME} )
install(CODE "execute_process(COMMAND ${PYTHON_EXECUTABLE} -m pip install --no-index -f dist yap4py
install(CODE "execute_process(COMMAND ${PYTHON_EXECUTABLE} -m pip install --force --no-index -f dist yap4py
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})"
DEPENDS Py4YAP ${CMAKE_BINARY_DIR}/${YAP_STARTUP} ${dlls} )
install(FILES yapi.yap DESTINATION ${libpl})
if (WITH_DOCS AND DOXYGEN_FOUND)

View File

@@ -1,13 +1,26 @@
%% @file yapi.yap
%% @brief support yap shell
%%
:- module(yapi, [query/3]).
:- module(yapi, [python_query/2,
python_ouput/0,
yap_query/3]).
:- use_module( library(lists) ).
:- use_module( library(maplist) ).
:- use_module( library(rbtrees) ).
%% @pred yap_query(0:Goal, + VarList, +OutStream, - Dictionary)
%% @pred yap_query(0:Goal, + VarList, - Dictionary)
%%
%% dictionary, Examples
%%
%%
python_query( Engine, String ) :-
atomic_to_term( String, Goal, VarNames ), writeln(Goal),
yap_query( Goal, VarNames, user_error, Dict), writeln(Dict),
Engine.bindings := Dict.
%% @pred yap_query(0:Goal, + VarList, +OutStream, - Dictionary)
%% @pred yap_query(0:Goal, + VarList, - Dictionary)
%%
@@ -24,8 +37,10 @@ yap_query( Goal, VarNames, Stream, Dictionary) :-
prolog:yap_query( Goal, VarNames, Dictionary) :-
yap_query( Goal, VarNames, user_output, Dictionary).
constraints(QVs, Goal, Stream, {Dict}) :-
constraints(QVs0, Goal0, Stream, {Dict}) :-
!,
copy_term(Goal0+QVs0, Goal+QVs),
writeln(ivs-IVs),
term_variables(Goal, IVs),
foldl(enumerate, IVs, 0, _Ns),
out(QVs, Stream, Dict).
@@ -43,7 +58,8 @@ enumerate('$VAR'(A), I, I1) :-
enum(I, [C]) :-
I < 26,
!, C is "A" + I.
!,
C is "A" + I.
enum(I, [C|Cs]) :-
J is I//26,
K is I mod 26,
@@ -63,14 +79,24 @@ v2py(v(I0) = v(I0), I0, I) :-
I is I0+1.
output([V=B], S) :-
format(S, 'a = ~q~n', [V, B]).
!,
format(S, '~a = ~q~n', [V, B]).
output([V=B|Ns], S) :-
format( S, 'a = ~q.~n', [V, B]),
format( S, '~a = ~q.~n', [V, B]),
output( Ns, S).
bvs([V=B],{V:B}) :-
!.
bvs([V=B|Ns], (V:B,N)) :-
output( Ns, N).
:- start_low_level_trace.
bvs([V=B], S:B) :-
atring_to_atom(V,S),
!.
bvs([V=B|Ns], (S:B,N) ) :-
atring_to_atom(V,S),
output( Ns, N).
python_output :-
:= import(sys),
open('//python/sys.stdout', append, Output),
open('//python/sys.stderr', append, Error),
set_prolog_flag(user_output, Output),
set_prolog_flag(user_error, Error).