En fait c'est un problème juste théorique. je dois simplement créer un fonction qui permet de convertir une expression infix en prefix
dans un exemple je dois avoir ca 2 * 5 + 1 =======> (+ 1 (* 2 5)) d'apres ce que j'ai compris c'est juste deux formes notation http://en.wikipedia.org/wiki/Infix_notation On 1 oct, 07:42, Jean-Baptiste BARTH <[EMAIL PROTECTED]> wrote: > Je ne vois pas de différence fondamentale entre (+ (* 2 5) 1) et (+ 1 (* > 2 5)), le "+" est commutatif aux dernières nouvelles (ce qui n'est > certes pas le cas du "-" ou du "/"). > > Intuitivement : tu as un bloc "2*5" à traiter d'abord, puis ce bloc est > inclus dans un bloc "résultat + 1". Pourquoi dans un cas ça te > retournerait "* 2 5" et dans l'autre "+ 1 résultat". Je veux dire, > pourquoi les opérandes trouveraient leur ordre inversé dans un des > traitements et pas dans l'autre ? Et quel intérêt cela aurait ? Peux-tu > préciser un peu le problème ? > > Cdt, > -- > Jean-Baptiste > > Bolo a écrit : > > > Bonjour à tous, > > > dsl de faire un double post à la fois sur le groupe rails et sur ruby, > > mais il semble plus avoir grand monde chez ruby.fr > > > j'essaye de faire une méthode pour convertir une expression infix et > > prefix > > ca passe pas > > Ou est mon problème ? > > merci > > def parse_simple(expr, opers=%w(+ - * /)) > > return expr if opers.empty? > > return parse_simple(expr, opers[1..-1]) unless expr.include? > > (opers.first) > > "(#{opers.first} " + > > expr.split(opers.first).map {|e| > > p e > > parse_simple(e, opers[1..-1]).strip > > }.join(" ") + > > ")" > > end > > > def parse(expr, exprs = []) > > while expr.gsub!(/\(([^\(\)]+)\)/) {"expr:#{(exprs << > > parse_simple($1)).size - 1}"}; end > > expr = parse_simple(expr) > > while expr.gsub!(/expr:(\d+)/) {exprs[$1.to_i]}; end > > expr > > end > > > Test > > p "2 * 5 + 1 > > > ca me retourne (+ (* 2 5) 1) > > > alors que ca devrait être (+ 1 (* 2 5)) > > 5))" --~--~---------~--~----~------------~-------~--~----~ Vous avez reçu ce message, car vous êtes abonné au groupe "Railsfrance" de Google Groups. Pour transmettre des messages à ce groupe, envoyez un e-mail à l'adresse [email protected] Pour résilier votre abonnement envoyez un e-mail à l'adresse [EMAIL PROTECTED] -~----------~----~----~----~------~----~------~--~---
