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 :

Prédicat terme clos


Sujet :

Prolog

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Janvier 2009
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 3
    Points : 1
    Points
    1
    Par défaut Prédicat terme clos
    Bonsoir,
    Je dois écrire le prédicat clos(X) qui est vrai uniquement si X est un terme clos.
    Le problème est qu'il faut lister les éléments du terme et regarder un par un si chaque élément est une variable. Si le terme est de la forme f(a,X,b) ça va, mais s'il est de la forme f(a1,......,an) je ne vois plus du tout ce qu'il faut faire, je ne sais même pas comment démarrer.
    Merci!

  2. #2
    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 sais le faire pour 3 arguments, quel est le problème avec N ?
    "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

  3. #3
    Nouveau Candidat au Club
    Inscrit en
    Janvier 2009
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Si on a 3 arguments, par exemple, on peut spécifier dans le programme la forme cherchée pour chacun d'entre eux:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    clos(f(X,Y,Z)):-atomic(X),atomic(Y),atomic(Z).
    Mais pour N on ne peut plus faire cette méthode là!

  4. #4
    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
    As-tu droit au prédic at '..='
    Exemple d'utilisation :
    1 ?- f(X,Y,Z) =.. L.
    L = [f, X, Y, Z] ;
    false.
    Auquel cas ça résoudrait ton problème.
    "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

  5. #5
    Nouveau Candidat au Club
    Inscrit en
    Janvier 2009
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Merci d'avoir répondu, mais je bloque encore......

    Je n'avais pas encore vu ce prédicat (je crois...), à quoi correspond t'il vraiment (à moins qu'il ne liste que le symbole racine et les variables)?
    Par contre mon prolog répond ceci je lance l'opération
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    | ?- f(X,Y,Z)=..L.
     
    L = [f,X,Y,Z]
     
    yes
    (yes à la place de false).

    Merci!

  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
    J'utilise SWI-Prolog et la sémantique top-level est un peu bizarre ...
    Il réponds false car il n'y a pas d'autre unification possible pour L (enfin je crois...).
    1 ?- f(X, g(Y,Z), T,U) =.. L.
    L = [f, X, g(Y, Z), T, U] ;
    false.
    Il liste au premier niveau les arguments des foncteurs, à toi de procéder récursivement.
    "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

Discussions similaires

  1. Réponses: 1
    Dernier message: 15/01/2008, 08h11
  2. set term ^
    Par tux dans le forum Débuter
    Réponses: 8
    Dernier message: 12/10/2004, 20h42
  3. Access me convient-il ? (limites et performances à terme)
    Par Marco le Pouillot dans le forum Access
    Réponses: 4
    Dernier message: 20/10/2003, 12h53
  4. traduction du terme "managed"
    Par sarasvati dans le forum Langages de programmation
    Réponses: 11
    Dernier message: 14/05/2003, 23h01
  5. Réponses: 2
    Dernier message: 22/07/2002, 18h02

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