Bonjour à tous,
Je travaille régulièrement avec SWI-PROLOG et Python et j'ai voulu "réunir" les 2 dans une application. J'ai mis en œuvre sans problème l'exemple donné dans le module:pyswip
https://code.google.com/p/pyswip/ et que j'ai adapté légèrement :
code de test.prolog :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 from pyswip import Prolog def onTest(self): prolog = Prolog() temp = 'test.prolog' prolog.consult(temp) results = list(prolog.query("father(michael,X)")) X = results[0]['X'] prolog = None print X
J'ai cherché ensuite à faire la même chose avec DJANGO mais une exception a été levée.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 father(michael,john). father(michael,gina).
Code dans views.py :
Message dans le navigateur :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 from pyswip import Prolog def onTest(request): prolog = Prolog() temp = 'test.prolog' prolog.consult(temp) results = list(prolog.query("father(michael,X)")) X = results[0]['X'] prolog = None print X return HttpResponse(X)
et message dans la console :WindowsError at /planning/onTest/
exception: access violation reading 0x00000020
Request Method: GET
Request URL: http://localhost:8000/planning/onTest/
Django Version: 1.7.3
Exception Type: WindowsError
Exception Value:
exception: access violation reading 0x00000020
Exception Location: C:\Python27\lib\site-packages\pyswip\prolog.py in __call__, line 94
Python Executable: C:\Python27\python.exe
Python Version: 2.7.8
Je cherche depuis un bon moment l'origine du problème afin d'essayer de le régler. Je me suis rendu compte qu'une ligne contenu dans le module -pyswip- n'était pas exécutée :Exception AttributeError: 'swipl_qid' in <bound method _QueryWrapper.__del__ of <pyswip.prolog._QueryWrapper object at 0x037AB7D8>> ignored
J'ai donc fait des recherches vers la fonctionself.swipl_fid = PL_open_foreign_frame()mais je dois avouer que c'est loin d'être évident !PL_open_foreign_frame()
Je suis donc à la recherche d'une aide me permettant de comprendre ce que fait cette fonctionafin d'essayer de régler mon problème ...PL_open_foreign_frame()
Merci d'avance pour vos contributions éventuelles.
@+
Partager