IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Prolog Discussion :

Problème avec SICStus, Prolog, Jasper et Eclipse


Sujet :

Prolog

  1. #1
    Membre extrêmement actif
    Avatar de Ryu2000
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2008
    Messages
    9 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2008
    Messages : 9 604
    Points : 18 520
    Points
    18 520
    Par défaut Problème avec SICStus, Prolog, Jasper et Eclipse
    Bonjour,

    Je dois appeler des prédicats Prolog depuis Java.
    J'utilise SICStus et Jasper.

    Au début j'ai essayé ça : http://sicstus.sics.se/sicstus/docs/...12.html#SEC169
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    public class Launcher {
     
    	public static void main(String[] argv){
    		SICStus sp;
    		SPPredicate predicat;
    		SPTerm nbReines, resultat;
    		SPQuery query;
    		int nbSolutions = 0;
     
    		try{
    			sp = new SICStus(argv,null);
    			sp.load("amazon.pl");
     
    			predicat = new SPPredicate(sp, "reinesBT", 2, "");
    			nbReines = new SPTerm(sp, 10);
    			resultat = new SPTerm(sp).putVariable();
     
    			query = sp.openQuery(predicat, new SPTerm[] { nbReines, resultat });
     
    			while (query.nextSolution()){
    				System.out.println(resultat.toString());
    				nbSolutions++;
    			}
     
    			System.out.println("Il existe : "+nbSolutions+" solutions");
    		}
    		catch ( Exception e ){
    			e.printStackTrace();
    		}
    	}
    }
    Le fichier amazon.pl n'était pas trouvé.
    Dans Run Configurations -> Arguments -> Working Directory j'ai choisi le dossier où se situait le fichier et ça a fonctionné.
    J'aurai pu aussi mettre mon fichier .pl à la racine du projet.

    Mais j'ai vu que cette doc datait de SICStus 3.7.1 et que j'avais la version 4.2.3.
    J'ai cherché la doc et je suis tombé là dessus :
    http://sicstus.sics.se/sicstus/docs/...readed-Example
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    sp = new SICStus(argv,null);   
    sp.restore("amazon.pl");
    query = sp.openPrologQuery("reinePLC(16, Reponses).",reponses);
    Mais sp.restore me génère cette erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    error(consistency_error(memory,saved_state,bad saved state),consistency_error(restore(amazon.pl),memory,saved_state,bad saved state))
    Si je remplace restore par load ça fonctionne.

    Un autre problème et que je n'arrive pas à exporter le projet en jar exécutable.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Exception in thread "main" java.lang.UnsatisfiedLinkError: Can't load library: /libspnative.so
            at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1649)
            at java.lang.Runtime.load0(Runtime.java:787)
            at java.lang.System.load(System.java:1022)
            at se.sics.jasper.SICStus.loadNativeCode(SICStus.java:549)
            at se.sics.jasper.SICStus.initSICStus(SICStus.java:834)
            at se.sics.jasper.SICStus.<init>(SICStus.java:982)
            at com.example.Launcher.main(Launcher.java:14)
    Et je ne trouve pas mon fichier .pl dans le .jar.

    Ouais donc en gros mon principal problème c'est que je n'arrive pas à exporter le projet.

    Si vous avez des indications, merci de m'en faire part.
    Bonne journée.
    Au revoir.
    Keith Flint 1969 - 2019

  2. #2
    Membre extrêmement actif
    Avatar de Ryu2000
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2008
    Messages
    9 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2008
    Messages : 9 604
    Points : 18 520
    Points
    18 520
    Par défaut
    En fait j'obtiens le même message d'erreur que lorsque le fichier n'est pas à la bonne place :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    error(existence_error(source_sink,jeux_hex2.pro),existence_error(load_files(user:jeux_hex2.pro),1,file,jeux_hex2.pro,0))
    Dans le projet Eclipse, le fichier est à la racine du projet.
    Dans le run configuration -> Arguments -> Workind Directory c'est par défaut :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ${workspace_loc:NomDuProjet}
    Quand je run depuis Eclipse ça fonctionne.
    Quand j'essaie de l'exporter en Runnable Jar File ça ne fonctionne plus...

    Mais par contre maintenant j'ai le fichier dans le .jar.
    Mais apparemment le user: n'est pas au bon endroit dans le jar...

    J'ai réussi à utiliser sp.restore("banch.sav"); en compilant le programme prolog :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    compile(bench),save_program('bench.sav').
    Il charge en exécutant depuis Eclipse, mais toujours pas depuis le runnable jar file...

    =======================================
    Edit : Je suis sur une piste là.
    J'ai ouvert le fichier comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    File test = new File("bench.sav");
    System.out.println(test.getAbsolutePath());
    sp.restore(test.getAbsolutePath());
    Depuis Eclipe ça prend bien le workspace depuis le jar ça prend le dossier contenant le jar.

    Le fichier est à l'intérieur du jar mais on regarde à coté du jar.
    Le fichier est dans :
    Dossier/Projet.jar/banch.sav

    Et on regarde dans :
    Dossier/banch.sav.

    Si je met :
    Dossier/Projet.jar
    Dossier/banch.sav

    Et ben ça fonctionne, mais j'aimerai mieux que banch.sav soit dans le jar.
    Mais je n'arrive pas à avoir un path correct...
    Keith Flint 1969 - 2019

  3. #3
    Membre extrêmement actif
    Avatar de Ryu2000
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2008
    Messages
    9 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2008
    Messages : 9 604
    Points : 18 520
    Points
    18 520
    Par défaut
    Bon au final je laisse tomber Eclipse, je compile et exécute depuis le terminal et je met le fichier compilé à côté des .class.
    Keith Flint 1969 - 2019

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 12/02/2010, 13h01
  2. Problème avec Subclipse après update d'Eclipse
    Par Ghorin dans le forum Eclipse
    Réponses: 4
    Dernier message: 13/11/2009, 14h17
  3. Problème avec le Compare Editor d'Eclipse
    Par maxxper59 dans le forum Eclipse
    Réponses: 1
    Dernier message: 11/10/2008, 12h38
  4. Problème avec le plugin CDT d'eclipse
    Par david cap dans le forum Eclipse Java
    Réponses: 3
    Dernier message: 27/10/2006, 10h27
  5. Problème avec la classe StringBuilder sous Eclipse
    Par Premium dans le forum Eclipse Java
    Réponses: 26
    Dernier message: 24/10/2006, 10h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo