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 :

parametre predicat en prolog


Sujet :

Prolog

  1. #1
    Futur Membre du Club
    Inscrit en
    Février 2009
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 6
    Points : 5
    Points
    5
    Par défaut parametre predicat en prolog
    bonjour
    je viens de commencer avec prolog et j'ai une petite question qui me tourne dans la tete!!
    on dit que dans un predicat exple calc(x|L1,x|L2):- calc(L1,L2)
    le X ici est un element de la liste.
    Ma question est la suivante: si par exemple je définis le predicat suivant
    F(L1,L2,L1|L3):-F(L1,L2,L3)
    sachant que les Li sont des listes, est-ce que mon predicat est bien défini???

    exemple: F([1,2],L2,[1,2,3,4]):-F([1,2],L2,[3,4])

    je vous remercie pour vos reponses à l'avance

  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
    Il y a des erreurs de notation (tout au moins avec SWI-Prolog que je connais.
    calc(x|L1,x|L2):- calc(L1,L2) doit s'écrire calc([x|L1],[x|L2]):- calc(L1,L2) et sans doute, 'x' devrait s'écrire X car les noms de variable en Prolog commence par une majuscule.
    Ma question est la suivante: si par exemple je définis le predicat suivant
    F(L1,L2,L1|L3):-F(L1,L2,L3)
    sachant que les Li sont des listes, est-ce que mon predicat est bien défini???

    exemple: F([1,2],L2,[1,2,3,4]):-F([1,2],L2,[3,4])
    Non ton prédicat est mal défini, et d'ailleurs, il n'est pas simple à définir.
    Un manière possible de faire est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    f(L1,L2,L4):-
      append(L1, L3, L4),
      f(L1,L2,L3)
    avec ici un 'f' minuscule !!
    La notation [Tete | Queue] permet de définir le premier élément d'une liste et le reste de cette liste, il faut obligatoirement les crochets (avec le SWI-Prolog), le concept est le même que le car cdr du Lisp.

    Ici avec [L1 | L2] cela veut dire que la liste L1 est le premier élément de [L1 | L2], donc ça correspond à ce genre de chose [[1,2], 3,4]. où L1 = [1,2] et L2 = [3,4].
    "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
    Futur Membre du Club
    Inscrit en
    Février 2009
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 6
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par Trap D Voir le message
    Ici avec [L1 | L2] cela veut dire que la liste L1 est le premier élément de [L1 | L2], donc ça correspond à ce genre de chose [[1,2], 3,4]. où L1 = [1,2] et L2 = [3,4].
    pour cet exemple c'est evident mais moi je parle du cas où L1=[1,2] et L2=[1,2,3,4] dans ce cas peut on considerer L1 comme debut de L2 (ecrire L1|L2)?????

  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
    Citation Envoyé par liaram Voir le message
    pour cet exemple c'est evident mais moi je parle du cas où L1=[1,2] et L2=[1,2,3,4] dans ce cas peut on considerer L1 comme debut de L2 (ecrire L1|L2)?????
    Non. L1 peut effectivement être considérée comme le début de L2 (d'où la possibilité du append), mais si tu écris L1 | L2, celà signifie quelque chose de tout à fait différent en SWI-Prolog (tout au moins).
    PS : Quel Prolog utilises-tu ?
    "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
    Futur Membre du Club
    Inscrit en
    Février 2009
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 6
    Points : 5
    Points
    5
    Par défaut
    je n'ai pas encore implementé! je fais un peu de théorie d'abord merci pour ta reponse!

Discussions similaires

  1. [prolog] Le predicat assert en prolog
    Par hakim0681 dans le forum Prolog
    Réponses: 2
    Dernier message: 26/12/2012, 18h43
  2. predicat fd_labeling (prolog)
    Par javast dans le forum Prolog
    Réponses: 3
    Dernier message: 21/02/2012, 21h58
  3. GridView, parametre ds SLQCommand et predicat LIKE
    Par Isher dans le forum ASP.NET
    Réponses: 2
    Dernier message: 25/11/2008, 13h52
  4. [GNU Prolog][Débutant] Comprendre les predicats
    Par frp31 dans le forum Prolog
    Réponses: 2
    Dernier message: 26/07/2007, 21h37
  5. Réponses: 9
    Dernier message: 30/05/2006, 14h57

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