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

发布于 2024-08-16 12:28:27 字数 379 浏览 10 评论 0原文

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

常规二元运算是

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

有效的调用就像

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

第一次调用意味着生成一个新的单词列表,其中所有单词至少有一个“a”和“c”。 所以我的问题是如何有效地处理争论?也许递归? 我被困住了...

提前致谢。

our homework is to write a ruby script who calculate a subset of wordlist depending on the expression.

regular binary operations are

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

A valid call would be like

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

First call means generate a new wordlist which all words have at least one 'a' and 'c'.
So my question is how do I process the arguemnts in a efficent way? Maybe recursiv?
I'm stuck...

Thanks in advance.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

白云不回头 2024-08-23 12:28:27

看起来像带有前缀符号的语法。堆栈确实是您的朋友,最容易使用的堆栈是调用堆栈。例如,给定以下语法:

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 的人来说可能会更清楚。

Looks like a grammer with prefix notation. A stack is indeed your friend, and the easiest stack to use is the call stack. For example, given this grammar:

expression ::= number | operand number number
operand ::= '+' | '-'

This is the code to evaluate it:

#!/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

Although this is Ruby, it's close enough to pseudo-code. I've put explicit returns in, although Ruby does not require them, because it may be clearer to someone who does not know Ruby.

指尖凝香 2024-08-23 12:28:27

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

Use a stack. The max size would be the number of arguments.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文