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 :

Utiliser le concept de liste


Sujet :

Prolog

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 6
    Points : 2
    Points
    2
    Par défaut Utiliser le concept de liste
    Après avoir consulté tous les tutoriels, tous les cours, tous les forums, je demeure rétif au sens profond de Prolog.
    Comment utiliser en pratique le concept de liste ?
    Voici 3 évaluations d'assertions en SWI-Prolog:

    1 ?- member(1,[1,2,3,4]).
    Pas de surprise. la réponse 'Yes' arrive bien.

    2 ?- append([1,2,3,4],[],L).
    Pas de surprise non plus.
    Prolog unifie la variable L et la liste [1,2,3,4]

    L = [1,2,3,4]

    mais maintenant tout se gâte !

    3 ?- member(5, L).

    L = [5|_G305]
    Yes

    Je n'ai donc rien compris !
    La valeur prise par la variable L n'est donc pas [1,2,3,4] ??
    Cette question même a-t-elle un sens ?

  2. #2
    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 Re: [ PROLOG ] Utiliser le concept de liste
    Citation Envoyé par Pierre Cormault
    Après avoir consulté tous les tutoriels, tous les cours, tous les forums, je demeure rétif au sens profond de Prolog.
    Ne t'inquiète pas, moi non plus je n'aimais pas beaucoup Prolog avant, et maintenant j'écris des articles dessus (que tu as certainement dû lire si tu as fait les tour de tous les tutoriels).


    Quelques petites précisions sur member/2: member/2 permet d'énumérer 1 à 1 les éléments d'une liste. Si tu fais member(M,[1,2,3,4]), M prendra comme valeur successivement 1,2,3 et 4.

    Pour vérifier qu'un élément est membre d'une liste, il vaut mieux utiliser memberchk/2 (qui ne laisse pas de point de choix).

    L'opération member(5, L). n'a pas vraiment de sens.

    Pour plus d'info, en swi-prolog:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    apropos( member ).
    apropos( memberchk ).
    Un article sur les listes est prévu pour plus tard.
    "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...

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 1
    Points : 1
    Points
    1
    Par défaut
    La réponse de PROLOG est tout à fait normale, il faut se dire qu'en PROLOG, il n'y a pas de mémorisation des variables.

    2 ?- append([1,2,3,4],[],L).

    L = [1,2,3,4]


    3 ?- member(5, L).

    L = [5|_G305]
    Yes

    Ce n'est pas le meme L que celui du 2, et L=[5 | _G305] veut dire que L est la liste qui commence par 5. _G305 est un renommage interne de PROLOG, _G305 peut s'unifié soit avec [] soit avec une liste d'au moins un élément.

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 6
    Points : 2
    Points
    2
    Par défaut [ PROLOG ] utiliser des listes (suite)
    Citation Envoyé par Leichmann
    La réponse de PROLOG est tout à fait normale, il faut se dire qu'en PROLOG, il n'y a pas de mémorisation des variables.
    Aïe ! Dans ce cas, comment se référer à une liste d'atomes déterminés, autrement qu'en énumérant ladite liste ?
    Il doit bien exister une solution plus pratique ?

  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
    Prolog est un langage de parcours et de construction d'arbres!

    Ce n'est pas un langage ordinaire tel le C ou le JAVA!

    Même si il est possible d'assigner des valeurs à des variables, c'est totalement déconseillé!

    Utilisant la syntaxe de Marseille (la vraie!), je ne peux guère t'aider dans ton problème...

  6. #6
    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 Re: [ PROLOG ] utiliser des listes (suite)
    Citation Envoyé par Leichmann
    La réponse de PROLOG est tout à fait normale, il faut se dire qu'en PROLOG, il n'y a pas de mémorisation des variables.
    En effet, je n'avais pas compris le problème de Pierre Cormault comme cela (pour le non-débutant, il est évident que ce n'est pas la même variable L, car 2 éxécutions différentes).

    En fait, il faut faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    |?- append([1,2,3,4],[],L),
    member(4, L).
    Et là, c'est bien le même L (par unification).
    "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...

  7. #7
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 6
    Points : 2
    Points
    2
    Par défaut [PROLOG] Utiliser le concept de liste [RESOLU]
    Merci à mes interlocuteurs, et tout particulièrement à pcaboche, l'auteur des 2 documents ("Le langage prolog", et "Résolution d'un sudoku") qui m'ont donné l'idée et l'envie d'utiliser Prolog dans un programme de bridge, afin de pouvoir distribuer des donnes ou des mains satisfaisant à des contraintes pré-exprimées.
    Mon intervention dans le forum démontrait ma totale ignorance du langage. Je prenais en effet une bibliothèque de procédures (un fichier file.pl) pour un programme, au motif que l'ensemble des procédures y figurant se trouvaient compilées en un seul 'consult(file.pl). J'y voyais donc des variables globales !
    Après quelques lectures, mon ignorance est désormais un peu moins grande, comme le montre l'extrait ci-dessous testant en SWI-Prolog un prédicat do_donne qui distribue et analyse les 4 mains d'une donne de bridge:

    % c:/Program Files/pl/cards.pl compiled 0.00 sec, 18,152 bytes
    1 ?- do_donne.
    --------------- NORD ---------------
    XP 3P VC 7C 2C DT XT 8T 4T DK VK 6K 3K
    Cette main comporte 2 Piques
    Cette main comporte 3 Coeurs
    Cette main comporte 4 Carreaux
    Cette main comporte 4 Trèfles
    Cette main comporte 6 PH
    --------------- EST ---------------
    AP 2P 8C 6C 5C 3C RT 5T RK XK 9K 5K 2K
    Cette main comporte 2 Piques
    Cette main comporte 4 Coeurs
    Cette main comporte 5 Carreaux
    Cette main comporte 2 Trèfles
    Cette main comporte 10 PH
    --------------- SUD ---------------
    DP 7P 5P 4P AC 9C 4C AT VT 9T 6T 8K 7K
    Cette main comporte 4 Piques
    Cette main comporte 3 Coeurs
    Cette main comporte 2 Carreaux
    Cette main comporte 4 Trèfles
    Cette main comporte 11 PH
    --------------- OUEST ---------------
    RP VP 9P 8P 6P RC DC XC 7T 3T 2T AK 4K
    Cette main comporte 5 Piques
    Cette main comporte 3 Coeurs
    Cette main comporte 2 Carreaux
    Cette main comporte 3 Trèfles
    Cette main comporte 13 PH
    Yes
    2 ?-

    Désormais, je peux aborder la P.L.C
    Si quelqu'un d'entre vous est intéressé par la question, qu'il m'adresse un mail privé; je serais heureux de partager ma toute nouvelle expérience.

  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 Pierre Cormault
    Merci à mes interlocuteurs, et tout particulièrement à pcaboche, l'auteur des 2 documents ("Le langage prolog", et "Résolution d'un sudoku") qui m'ont donné l'idée et l'envie d'utiliser Prolog dans un programme de bridge
    Et bien merci ! Ca fait plaisir d'avoir des retours de la part des lecteurs et de savoir que les articles ainsi rédigés ont pu aider quelqu'un à mieux comprendre Prolog (et même lui donner envie de l'utiliser).

    D'autres articles sont en cours de validation ou d'écriture, afin d'approfondir le sujet...

    PS: L'article "Le langage prolog" a été mis à jour dernièrement.
    "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...

Discussions similaires

  1. Réponses: 7
    Dernier message: 18/04/2006, 17h44
  2. [Conception] todo list -> commencement
    Par masseur dans le forum PHP & Base de données
    Réponses: 23
    Dernier message: 02/02/2006, 11h50
  3. [Conception] controle liste
    Par amigauss dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 19/01/2006, 19h08
  4. Utilisation générale... Concept de subversion
    Par rabobsky dans le forum Linux
    Réponses: 4
    Dernier message: 10/08/2005, 15h36
  5. Utilisation de la classe List de STL avec wxWidgets
    Par aoyou dans le forum wxWidgets
    Réponses: 7
    Dernier message: 10/03/2005, 17h41

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