我们的作业是写一个红宝石脚本谁计算取决于表达单词表的一个子集

标准二进制操作

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

一个有效呼叫会像

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

首先呼叫的装置产生一个新的单词表,其所有字具有至少一个“一”和“c”。 所以我的问题是我如何处理在efficent方式arguemnts?也许recursiv? 我卡住了...

预先感谢。

有帮助吗?

解决方案

看起来像前缀表示法的语法。堆栈的确是你的朋友,最简单的堆栈使用的是调用堆栈。例如,给定此语法:

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

虽然这是红宝石,它足够接近伪代码。我已经把明确的回报,虽然红宝石并不需要它们,因为它可能会更清楚的人谁不知道红宝石。

其他提示

使用的叠层。最大尺寸将参数的数目。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top