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.

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top