manera más eficiente a los argumentos de proceso desde la línea de comandos en la notación de prefijo

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

Pregunta

nuestra tarea es escribir un guión de rubí que calcular un subconjunto de lista de palabras en función de la expresión.

operaciones binarias son regulares

&& And operator
|| Or operator
++ Concatenate operator
! Negation operator

Una llamada válida sería como

./eval.rb wordlist && a c
or
./eval.rb wordlist && || a b c

medios primera llamada a generar una nueva lista de palabras, que todas las palabras tienen al menos una 'a' y 'c'. Así que mi pregunta es ¿cómo puedo procesar la arguemnts de una manera eficiente? Tal vez recursiv? Estoy atascado ...

Gracias de antemano.

¿Fue útil?

Solución

se parece a una gramática con el prefijo de notación. Una pila es de hecho su amigo, y la pila más fácil de usar es la pila de llamadas. Por ejemplo, dada esta gramática:

expression ::= number | operand number number
operand ::= '+' | '-'

Este es el código para evaluarlo:

#!/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

A pesar de que esto es Ruby, que es lo suficientemente cerca de pseudo-código. He puesto rendimientos explícitos en, aunque Rubí no requiere de ellos, ya que puede ser más claro para alguien que no conoce a Ruby.

Otros consejos

Utilice una pila. El tamaño máximo sería el número de argumentos.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top