Moyen le plus efficace pour traiter les arguments de la ligne de commande en notation préfixe

StackOverflow https://stackoverflow.com/questions/1991672

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.

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top