modo più efficace per elaborare gli argomenti della riga di comando in notazione prefisso
-
22-09-2019 - |
Domanda
il nostro dovere è quello di scrivere uno script che rubino calcolare un sottoinsieme di elenco di parole a seconda dell'espressione.
operazioni binarie regolari sono
&& And operator
|| Or operator
++ Concatenate operator
! Negation operator
Una chiamata valida sarebbe come
./eval.rb wordlist && a c
or
./eval.rb wordlist && || a b c
Per prima chiamata significa generare un nuovo elenco di parole che tutte le parole hanno almeno un 'a' e 'c'. Quindi la mia domanda è: come faccio a elaborare i arguemnts in modo efficiente? Forse recursiv? Sono bloccato ...
Grazie in anticipo.
Soluzione
Sembra un Grammer con la notazione prefisso. Una pila è davvero tuo amico, e lo stack più facile da usare è lo stack di chiamate. Ad esempio, dato questa grammatica:
expression ::= number | operand number number
operand ::= '+' | '-'
Questo è il codice per valutarlo:
#!/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
Anche se questo è Ruby, che è abbastanza vicino a pseudo-codice. Ho messo i rendimenti espliciti, anche se Ruby non richiede loro, perché può essere più chiaro a qualcuno che non conosce Ruby.
Altri suggerimenti
Utilizzare una pila. La dimensione massima sarebbe il numero di argomenti.