以前缀表示法从命令行处理参数的最有效方法

时间:2010-01-02 14:05:50

标签: ruby command-line-arguments prefix

我们的作业是编写一个ruby脚本,根据表达式计算wordlist的子集。

常规二进制操作

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

有效的通话就像

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

第一次调用意味着生成一个新的单词列表,所有单词都至少有一个'a'和'c'。 所以我的问题是如何以高效的方式处理争论?也许是recursiv? 我被卡住了......

提前致谢。

2 个答案:

答案 0 :(得分:0)

使用堆栈。最大大小将是参数的数量。

答案 1 :(得分: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的人来说可能更清楚。