0

宿題は、式に応じて単語リストのサブセットを計算する Ruby スクリプトを作成することです。

通常の二項演算は

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

有効な呼び出しは次のようになります

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

最初の呼び出しは、すべての単語が少なくとも 1 つの 'a' と 'c' を持つ新しい単語リストを生成することを意味します。だから私の質問は、どのように議論を効率的に処理するのですか? 多分再帰?私は立ち往生しています...

前もって感謝します。

4

2 に答える 2

0

スタックを使用します。最大サイズは引数の数になります。

于 2010-01-02T14:25:20.833 に答える
0

プレフィックス表記のグラマーのように見えます。スタックは確かにあなたの友人であり、使用する最も簡単なスタックは呼び出しスタックです。たとえば、次の文法があるとします。

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 では必要ありませんが、明示的な戻り値を入れました。

于 2010-01-02T16:23:58.000 に答える