Самый эффективный способ обработки аргументов из командной строки в префиксной записи.

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

Вопрос

Наша домашняя работа — написать Ruby-скрипт, который вычисляет подмножество списка слов в зависимости от выражения.

обычные бинарные операции

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

Действительный вызов будет выглядеть так:

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

Первый вызов означает создание нового списка слов, все слова которого имеют хотя бы одну букву «а» и «в».Итак, мой вопрос: как мне эффективно обрабатывать аргументы?Может, рекурсивно?Я застрял...

Заранее спасибо.

Это было полезно?

Решение

Похоже на грамматик с префиксной записью.Стек действительно ваш друг, и самый простой в использовании стек — это стек вызовов.Например, учитывая эту грамматику:

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

Это код для его оценки:

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

Хотя это Ruby, он достаточно близок к псевдокоду.Я указал явные возвраты, хотя Ruby их не требует, потому что это может быть понятнее для тех, кто не знает Ruby.

Другие советы

Используйте стек.Максимальный размер будет количеством аргументов.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top