我们的作业是编写一个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? 我被卡住了......
提前致谢。
答案 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的人来说可能更清楚。