以前缀表示法从命令行处理参数的最有效方法
Posted
技术标签:
【中文标题】以前缀表示法从命令行处理参数的最有效方法【英文标题】:Most efficient way to process arguments from the command-line in prefix notation 【发布时间】:2010-01-02 14:05:50 【问题描述】:我们的作业是编写一个 ruby 脚本,根据表达式计算单词列表的子集。
常规二元运算是
&& And operator
|| Or operator
++ Concatenate operator
! Negation operator
一个有效的调用是这样的
./eval.rb wordlist && a c
or
./eval.rb wordlist && || a b c
第一次调用意味着生成一个新的单词表,其中所有单词至少有一个'a'和'c'。 所以我的问题是我如何以有效的方式处理争论?也许递归? 我卡住了……
提前致谢。
【问题讨论】:
否定运算符显然不是二进制的,很抱歉。 【参考方案1】:看起来像一个带有前缀符号的语法。堆栈确实是您的朋友,最容易使用的堆栈是调用堆栈。例如,给定以下语法:
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 的人来说可能会更清楚。
【讨论】:
【参考方案2】:使用堆栈。最大大小将是参数的数量。
【讨论】:
以上是关于以前缀表示法从命令行处理参数的最有效方法的主要内容,如果未能解决你的问题,请参考以下文章