je veux construire un programme prolog qui supprime les caracéres spésciaux d'une chaine de caractére comment je peu le realiser SVP
je veux construire un programme prolog qui supprime les caracéres spésciaux d'une chaine de caractére comment je peu le realiser SVP
Quel prolog utilisez-vous ?
Qu'avez-vous tenté ? Quels sont les problèmes que vous rencontrez ?
Comment définissez-vous ce que vous appelez les caractères spéciaux ?
.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 netEntr(E,R):-string_length(E,L), ( sub_string(E,0,_,_,'\s') , L >0,L1 is L-1 ,sub_string(E,1,L1,_,R),writeln(R), netEntr(R,R2)); ( not(sub_string(E,0,_,_,'\s')),writeln(E),R=E,writeln(R))
mais le resultat est erroné
Bonjour
Vous utilisez un style impératif à éviter en Prolog ! (en l(occurence string_length).
Utilisez plutôt une approche "fonctionnelle" possible avec maplist.
Une string peut-être trensformée en liste de caractères à l'aide de string_chars, ensuite travaillez sur la liste puis recréez votre string :
Exemple d'utilisation :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 % verification d'un caractère netcar(Bad, In, Out) :- member(In, Bad) -> Out = ' ' ; Out = In. netEntr(In, Bad, Out) :- string_chars(In, CIn), maplist(netcar(Bad), CIn, COut), string_chars(Out, COut).
On peut améliorer la méthode ;
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 ?- netEntr("acde",[a,d], Out). Out = " c e".
Avec comme résultat :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 netcar(Rep, In, Out) :- member(In-R, Rep) -> Out = R ; Out = In. netEntr(In, Rep, Out) :- string_chars(In, CIn), maplist(netcar(Rep), CIn, COut), string_chars(Out, COut).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 ?- netEntr("acde",[a-x,d-y], Out). Out = "xcye".
j'ai juste besoin d'un programme qui supprime le blanc au les tabulations d'une chaine de caractére dans l'avant exp s=' write('bounjour') le resultat est R='write('Bonjour').
Ok, comm d'hab, j'ai lu en diagonale la question.
On peut utiliser un esprit "fonctionnel" avec foldl :
Avec comme résultat :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 netcar(Bad, In, Acc, NewAcc) :- member(In, Bad) -> NewAcc = Acc ; append(Acc, [In], NewAcc). netEntr(In, Rep, Out) :- string_chars(In, CIn), foldl(netcar(Rep), CIn, [], COut), string_chars(Out, COut).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 15 ?- netEntr(" write('bonjour')",[' '], Out). Out = "write('bonjour')".
merci pour aide
j'ai voulu dessiner un graphe avec grapheviz et prolog est ce qu'il possible
Il existe des possibilités :
https://github.com/wouterbeek/plGraphViz
http://www.swi-prolog.org/pack/list?p=callgraph
Jamais testé mais étant donné les auteurs, ça devrait bien fonctionner.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager