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 :

convertir un atome en variable


Sujet :

Prolog

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    en retraite
    Inscrit en
    Mai 2012
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : en retraite
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2012
    Messages : 1
    Points : 1
    Points
    1
    Par défaut convertir un atome en variable
    Bonsoir,
    Est-il possible de convertir un atome en variable, par exemple dans le but de réécrire un terme en remplaçant chaque atome qui n'est ni prédicat ni foncteur par une variable de même identifiant que l'atome, ou conservant une bijection?

    exemple: réécrire p(a,f(a,b)) en p(A,f(A,B)) ou p(X1,f(X1,X2))

  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
    On peut déjà transformer un atome en term à l'aide term_to_atom.
    Ensuite on peut utiliser récursivement le prédicat =.. dont voici la description dans l'aide de SWI-Prolog
    ?Term =.. ?List [ISO]
    List is a list which head is the functor of Term and the remaining
    arguments are the arguments of the term. Each of the arguments
    may be a variable, but not both. This predicate is called `Univ'.
    Examples:

    ?- foo(hello, X) =.. List.
    List = [foo, hello, X]

    ?- Term =.. [baz, foo(1)]
    Term = baz(foo(1))
    "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
    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
    Je ne sais pas où vous en êtes, j'ai réussi à le faire mais les variables s'afficehnt "mal" :
    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
    modifie(In, Out) :-
    	modifie(In, [], Out, _).
    %
    modifie(In, LstArgs, Out, LstArgs1) :-
    	In =..[Fonc|Args],
    	modifie_1(Args, LstArgs, [], Res, LstArgs1),
    	Out =.. [Fonc| Res].
     
    modifie_1([], Lst, R, RV, Lst) :-
    	reverse(R, RV).
     
     
    modifie_1([H | T], LstArgs, Tmp, Res, LstArgs1) :-
    	functor(H, _, 0),
    	(   member([H, X], LstArgs)
    	->  modifie_1(T, LstArgs, [X | Tmp], Res, LstArgs1)
    	;   modifie_1(T, [[H, X]| LstArgs], [X | Tmp], Res, LstArgs1)).
     
    modifie_1([H | T], LstArgs, Tmp, Res, LstArgs1) :-
    	functor(H, _, N),
    	N > 0,
    	modifie(H, LstArgs, Out, LstArgsTmp),
    	modifie_1(T, LstArgsTmp, [Out|Tmp], Res, LstArgs1).
    Avec comme sortie :
    ?- modifie( p(a,f(a,b)), X).
    X = p(_G2957,f(_G2957,_G2987)) .
    Il est difficile d'afficher des "noms" de variables A, B, C sur la console Prolog.
    "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. Convertir un modèle de variable step vers fixed step
    Par espoir1976 dans le forum Simulink
    Réponses: 9
    Dernier message: 28/12/2012, 00h57
  2. Convertir la valeur d’une variable string en une variable.
    Par playitagainsam dans le forum Langages
    Réponses: 4
    Dernier message: 11/09/2012, 19h15
  3. convertir la valeur dune variable pour appeler une method.
    Par speed034 dans le forum Ruby on Rails
    Réponses: 2
    Dernier message: 06/06/2011, 11h08
  4. convertir un champs en variable de module
    Par atoll.de.colombo dans le forum VBA Access
    Réponses: 1
    Dernier message: 28/08/2007, 09h14
  5. Réponses: 6
    Dernier message: 14/02/2004, 14h01

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