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 :

Garder la valeur d'une variable en mémoire + utilisation du if


Sujet :

Prolog

  1. #1
    En attente de confirmation mail
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 6
    Points : 5
    Points
    5
    Par défaut Garder la valeur d'une variable en mémoire + utilisation du if
    Bonjour !

    Je suis débutante en prolog et je me pose quelques questions :

    - Peut-on garder la valeur d'une variable en mémoire afin de s'en servir un peu comme d'une constante ? Si oui, comment donc fait-on ça ?
    - J'ai vu dans l'aide de prolog qu'il existe le if mais je n'arrive absolument pas l'utiliser, quelqu'un peut-il m'expliquer ?

    Merci d'avance

  2. #2
    Membre confirmé Avatar de billynirvana
    Homme Profil pro
    Architecte technique
    Inscrit en
    Décembre 2004
    Messages
    472
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2004
    Messages : 472
    Points : 552
    Points
    552
    Par défaut
    Ah la la! Pour programmer en prolog il faut oublier tout autre concept de programmation! Par conséquent, les variables ne doivent pas etre assignées (oupss j'en ai trop dit ).

    Tu peux reprogrammer le if de cette manière:

    si P est vrai alors V, sinon on fait F.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    if -> P ! V;
    if -> F;

  3. #3
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    En SWI Prolog le if existe
    2 = 3 -> writeln(oui); writeln(non).
    non
    yes
    3 = 3 -> writeln(oui); writeln(non).
    oui

    Yes
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  4. #4
    En attente de confirmation mail
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 6
    Points : 5
    Points
    5
    Par défaut
    Merci beaucoup pour vos réponse ! Je vais tenter ça tout de suite !!!

    Pour les variables, dites-moi si je me trompe mais je me demande si assert ne fait pas un peu ce que je veux. Mais comme je n'ai pas bien compris ce que c'était je dois bien me tromper !

    Si on ne peut absolument pas avoir de variables assignés comme tu dis, ça veut dire que pour garder la valeur d'une variable, il faut se la passer de but en but ? Si c'est bien ça, ça va pas être très joli. Même si ce n'est pas censé être joli

    En tous cas, merci encore !

  5. #5
    Membre confirmé Avatar de billynirvana
    Homme Profil pro
    Architecte technique
    Inscrit en
    Décembre 2004
    Messages
    472
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2004
    Messages : 472
    Points : 552
    Points
    552
    Par défaut
    Donne nous un peu ce que tu tentes de faire, et je te dirai comment t'en passer des assignations.

    Billy

  6. #6
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    Si tu as vramient besoin de variables globales (mais j'en doute un peu) tu as la possibilité, toujours avec SWI Prolog de les manipuler avec le couple de fonctions b_getval(+Name, -Value) et b_setval(+Name, +Value)
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  7. #7
    Rédacteur
    Avatar de pcaboche
    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    2 785
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Singapour

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 785
    Points : 9 716
    Points
    9 716
    Par défaut
    Citation Envoyé par Chlipouni
    Pour les variables, dites-moi si je me trompe mais je me demande si assert ne fait pas un peu ce que je veux. Mais comme je n'ai pas bien compris ce que c'était je dois bien me tromper !
    A mon sens, assert se rapproche pas mal de ce que tu cherches à faire...
    "On en a vu poser les armes avant de se tirer une balle dans le pied..."
    -- pydévelop

    Derniers articles:

    (SQL Server) Introduction à la gestion des droits
    (UML) Souplesse et modularité grâce aux Design Patterns
    (UML) Le Pattern Etat
    Autres articles...

  8. #8
    Rédacteur
    Avatar de pcaboche
    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    2 785
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Singapour

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 785
    Points : 9 716
    Points
    9 716
    Par défaut
    Citation Envoyé par billynirvana
    Ah la la! Pour programmer en prolog il faut oublier tout autre concept de programmation!
    +1
    "On en a vu poser les armes avant de se tirer une balle dans le pied..."
    -- pydévelop

    Derniers articles:

    (SQL Server) Introduction à la gestion des droits
    (UML) Souplesse et modularité grâce aux Design Patterns
    (UML) Le Pattern Etat
    Autres articles...

  9. #9
    En attente de confirmation mail
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 6
    Points : 5
    Points
    5
    Par défaut
    Merci pour le if en SWI Prolog, ça marche, c'est parfait ! En fait je ne l'utilisais pas du tout comme il faut alors il était pas content

    Alors, ce que je veux faire est plutôt simple : je construis un tableau dont l'utilisateur peut choisir les dimensions. Il s'affiche en mode caractère avec les coordonnées dans les cases. Pour faire tout ça, je me sers d'une liste dans laquelle je mets les coordonnées et en fait je voudrais pouvoir récupérer cette liste pour m'en servir lors de l'appel d'un autre but.

    Mais j'aimerais éviter de passer ma liste de but en but alor que je n'en ai pas vraiment besoin à ces endroits là... Donc je pense qu'il me faudrait une espèce de variable globale

    C'est vrai qu'il est plutôt difficile de se mettre au Prolog quand on a des réflexe de programmation "normale" ! Je vais faire des efforts

    Merci pour vos réponses !

  10. #10
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    Peut-être faut-il revoir la conception de ton projet dans une optique Prolog,
    je te rappelle
    Ah la la! Pour programmer en prolog il faut oublier tout autre concept de programmation!
    Si tu veux qu'on t'aide il faut en dire plus, si tu peux ...
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  11. #11
    Rédacteur
    Avatar de pcaboche
    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    2 785
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Singapour

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 785
    Points : 9 716
    Points
    9 716
    Par défaut
    Tu peux aussi faire une recherche sur:
    • assert, retract, erase, abolish
    • record, recorded, erase
    Dans SWI-Prolog:
    pour avoir la doc sur assert.
    "On en a vu poser les armes avant de se tirer une balle dans le pied..."
    -- pydévelop

    Derniers articles:

    (SQL Server) Introduction à la gestion des droits
    (UML) Souplesse et modularité grâce aux Design Patterns
    (UML) Le Pattern Etat
    Autres articles...

  12. #12
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    pour ce qui est de assert et retract tu peux procéder comme celà
    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
    % tu informes Prolog que ce predicat ajoutera des faits dynamiquement
    :- dynamic
            my_dynamic_predicate/1.
    my_dynamic_predicate(_).
     
    % Si tu n 'as qu'un fait a utiliser mais dont la valeur peut évoluer au cours du programme tu peux faire
      retractall(my_dynamic_predicate(_)),
      my_dynamic_predicate(<Nouvelle_Valeur>),
     
    % Pour recuperer le fait tu fais
      my_dynamic_predicate(X),
     
     
    % A la fin du programme pour laisser l'environnement aussi propre que tu l'avais trouvé en entrant tu fais 
      retractall(my_dynamic_predicate(_)),
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  13. #13
    Membre confirmé Avatar de billynirvana
    Homme Profil pro
    Architecte technique
    Inscrit en
    Décembre 2004
    Messages
    472
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2004
    Messages : 472
    Points : 552
    Points
    552
    Par défaut
    SWI Prolog est une sourcouche du prolog? Parce qu'avec mon compilateur, je dois quasiement tout reécrire. (jusqu'au if, vous imaginez...)

  14. #14
    Rédacteur
    Avatar de pcaboche
    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    2 785
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Singapour

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 785
    Points : 9 716
    Points
    9 716
    Par défaut
    SWI-Prolog est une implémentation de Prolog comme il en existe beaucoup d'autres (les plus connues: gprolog, Sicstus Prolog) utilisant pour la plupart la syntaxe d'Edimburgh.

    Bien sûr, chacune d'elles a des fonctionalités propres (c'est sur ce terrain-là que se battent les implémentations commerciales comme Sicstus), même si certaines fonctionnalités apparaissent dans la plupart des implémentations (sous des formes parfois différentes). Elles sont donc toutes plus ou moins des "surcouches" de Prolog.

    Je prends souvent swi-prolog comme référence parce que gratuit et fournissant pas mal de fonctionailtés.

    Dis-nous, c'est quoi ton compilateur?
    "On en a vu poser les armes avant de se tirer une balle dans le pied..."
    -- pydévelop

    Derniers articles:

    (SQL Server) Introduction à la gestion des droits
    (UML) Souplesse et modularité grâce aux Design Patterns
    (UML) Le Pattern Etat
    Autres articles...

  15. #15
    Membre confirmé Avatar de billynirvana
    Homme Profil pro
    Architecte technique
    Inscrit en
    Décembre 2004
    Messages
    472
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2004
    Messages : 472
    Points : 552
    Points
    552
    Par défaut
    Mon compilateur est celui de PrologIA. Aujourd'hui, prologIA ne maintient plus prolog, et d'ailleurs traite d'autres domaines.

    Voici donc le zip qui contient le strict minimum pour faire tourner Prolog et des exemples du comment qu'on utilise ce prolog.

    http://www.resus.univ-mrs.fr/~billy/...8-PrologIA.zip


    Moi je reprogramme tout, je me suis fait ma propre API (une centaine de prédicats génériques (tri de liste, recherche d'éléments...)

    Je préfère ne pas avoir d'APIs prédéfinies. Avec ce prolog, je comprends tout ce que mon code fait à 100%.

    Billy

  16. #16
    Membre confirmé Avatar de billynirvana
    Homme Profil pro
    Architecte technique
    Inscrit en
    Décembre 2004
    Messages
    472
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2004
    Messages : 472
    Points : 552
    Points
    552
    Par défaut
    Citation Envoyé par Chlipouni
    Bonjour !

    Je suis débutante en prolog et je me pose quelques questions :

    - Peut-on garder la valeur d'une variable en mémoire afin de s'en servir un peu comme d'une constante ? Si oui, comment donc fait-on ça ?
    - J'ai vu dans l'aide de prolog qu'il existe le if mais je n'arrive absolument pas l'utiliser, quelqu'un peut-il m'expliquer ?

    Merci d'avance

    Par contre, je suis bête. J'ai mal lu ta requete! Si tu veux mettre des constantes il suffit de faire:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    PredicatConstante(constante)->;
    et pour utiliser ta constante tu fais par exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    predicat(t) ->
    predicatConstante(z)
    predicat2(z, t);
    Ici, ton z sera égal à la constante.


    Je pensais que tu voulais utiliser des variables. comme en C style i=0, i=i+1 ... etc...

    Mais cela ne change rien à ce que j'ai dit, hein!

    Bon courage!



    Billy

Discussions similaires

  1. Réponses: 5
    Dernier message: 19/11/2010, 12h28
  2. Réponses: 3
    Dernier message: 20/11/2009, 19h51
  3. Réponses: 9
    Dernier message: 22/10/2007, 13h34
  4. Réponses: 5
    Dernier message: 16/05/2006, 09h23
  5. garder la valeur d'une variable
    Par somatino dans le forum Langage
    Réponses: 15
    Dernier message: 31/03/2006, 23h03

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