Moyen le plus efficace pour traiter les arguments de la ligne de commande en notation préfixe
-
22-09-2019 - |
Question
nos devoirs est d'écrire un script Ruby qui calcule un sous-ensemble de wordlist en fonction de l'expression.
opérations binaires régulières sont
&& And operator
|| Or operator
++ Concatenate operator
! Negation operator
Un appel valide serait comme
./eval.rb wordlist && a c
or
./eval.rb wordlist && || a b c
Le premier appel signifie générer une nouvelle liste de mots tous les mots qui ont au moins un « a » et « c ». Donc, ma question est de savoir comment puis-je traiter les arguemnts d'une manière efficent? recursiv Peut-être? Je suis coincé ...
Merci d'avance.
La solution
On dirait un Grammer avec la notation préfixe. Une pile est en effet votre ami, et le plus facile à utiliser est pile la pile d'appels. Par exemple, étant donné cette grammaire:
expression ::= number | operand number number
operand ::= '+' | '-'
Ceci est le code pour l'évaluer:
#!/usr/bin/ruby1.8
@tokens = ['*', 2, '+', 3, 4]
def evaluate
token = @tokens.shift # Remove first token from @tokens
case token
when '*'
return evaluate * evaluate
when '+'
return evaluate + evaluate
else
return token
end
end
puts evaluate # => 14
Bien que ce soit Ruby, il est assez proche de pseudo-code. J'ai mis des rendements explicites, bien que Ruby ne les oblige pas, car il peut être plus clair à quelqu'un qui ne sait pas Ruby.
Autres conseils
A l'aide d'une pile. La taille maximale serait le nombre d'arguments.