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 une chaine en liste


Sujet :

Prolog

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Février 2014
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2014
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Convertir une chaine en liste
    Salut, je suis nouveau en programmation prolog. je souhaite réaliser un programme prolog pour réaliser des opérations sur des polynomes. mon problème actuelle se situe au niveau de la lecture du polynome. en effet je souhaite que l'utilisateur entre une expression comme : 2x^3 + x^2 - 4x^1 - 8 et que cette expression si elle correspond à un polynome soit convertie en liste => [[2,3], [1,2], [-4, 1], [-8, 0]]. comment pourrais - je réaliser cette fonction de lecture??? merci d'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
    Comme il vous a été indiqué sur un autre forum, il faut utiliser les DCG
    Voici un exemple de ce que l'on peut faire, ceci n'est pas vraiment testé :
    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    poly(Exp, L) :-
    	atomic_list_concat(List, ' ', Exp),
    	atomic_list_concat(List, Exp1),
    	atom_chars(Exp1, Chars),
    	phrase(extract(1, Chars), L).
     
    extract(Mult, Exp) -->
    	extract_monome(Mult, Exp, Rest),
    	extract_rest(Rest).
     
    extract_rest(['+' | T]) -->
    	extract(1, T).
     
    extract_rest(['-' | T]) -->
    	extract(-1, T).
     
    extract_rest([]) -->
    	[].
     
     
    extract_monome(Mult, Exp, Rest) -->
    	extract_coef(Exp, Val, R1),
    	extract_variable(R1, R2),
    	{ Coef is Val * Mult},
    	extract_puissance(R2, Coef, Rest).
     
    extract_coef([H | T], N, R) -->
    	{char_type(H, digit(V))},
    	extract_number(T, V, N, R).
     
    extract_coef([H | T], N, R) -->
    	{\+char_type(H, digit),
    	N = 1, R = [H | T]},
    	[].
     
    extract_number([H | T], V1, N, R) -->
    	{char_type(H, digit(V2)), V is V1 * 10 + V2},
    	extract_number(T, V, N, R).
     
    extract_number([H | T], V1, V1, [H | T]) -->
    	{\+char_type(H, digit)},
    	[].
     
    extract_number([], V1, V1, []) -->
    	[].
     
    extract_variable([_, '^'|R], R) --> [].
    extract_variable([], []) --> [].
     
    extract_puissance([H | T], Coef, R) -->
    	{char_type(H, digit(V))},
    	extract_number(T, V, N, R),
    	[[Coef, N]].
     
    extract_puissance([H | T], Coef, [H | T]) -->
    	{\+char_type(H, digit)},
    	[[Coef, 0]].
     
    extract_puissance([], Coef, []) -->
    	[[Coef, 0]].
    Résultat :
    ?- poly('2x^3 + x^2 - 4x^1 - 8', L).
    L = [[2, 3], [1, 2], [-4, 1], [-8, 0]] ;
    false.
    "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
    Homme Profil pro
    Développeur Java
    Inscrit en
    Février 2014
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2014
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Merci Trap D.
    C'est effectivement çà. mais je me demande bien à quoi est dû ce 'false'. de toutes façons je vais de ce pas m'instruire sur les 'DCG' . Merci Encore!

  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
    Le false est du au mécanisme Prolog : j'ai eu une première réponse, puis en tapant sur la barre d'espace, j'ai demandé s'il y avait une autre réponse (par backtrack), comme il n'y en a pas, j'ai eu comme réponse false.
    "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. [VB]Convertir une chaine de caractere en entier
    Par budylove dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 21/02/2006, 11h06
  2. Réponses: 3
    Dernier message: 03/01/2006, 23h14
  3. [C#] Convertir une chaine accentue => sans accents
    Par alex57 dans le forum Windows Forms
    Réponses: 2
    Dernier message: 07/09/2005, 09h21
  4. Convertir une chaine en format heure
    Par Lars dans le forum ASP
    Réponses: 3
    Dernier message: 24/05/2005, 11h44
  5. Convertir une chaine UTF8 en ISO-8859-1
    Par eods dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 26/08/2004, 16h57

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