已知Infix表示法中的数字时Postfix表示法中的字符数

时间:2014-06-05 13:23:30

标签: character infix-notation postfix-notation

我只使用函数调用和整数从Infix表示法转换为Postfix表示法(只有字母,数字,逗号,括号和空格)。

例如,add(add(1,2),add(3,4))1 2 add 3 4 add add 输入表达式长22个字符,输出19,缩短3个。

sqrt(add(5,11))5 11 add sqrt
输入表达式长15个字符,输出13,缩短2个。

Postfix表示法总是会被字符数量等于函数量吗?

1 个答案:

答案 0 :(得分:3)

中缀是否需要更多语法?这是一个有趣的问题。但是,您提供的示例是前缀表示法,而不是中缀。简而言之:是的,在某些情况下,中缀可以需要更多语法(例如,消除运算符优先级的歧义)。

我认为计算必要的令牌可能比计算字符更有意义。让我们看看会发生什么。

在前缀示例中,通过将开头的parens移动到运算符的左侧并用空格替换逗号,我们有Lisp:(+ (+ 1 2) (+ 3 4))(sqrt (+ 5 11))

然后我们可以简单地撤消所有内容并使用后缀表示法(但不会减少令牌或字符数):((1 2 +) (3 4 +) +)((5 11 +) sqrt)

鉴于arity已修复(+为二进制,sqrt为一元),我们可以明确删除parens并使其具有Forth:1 2 + 3 4 + +5 11 + sqrt。实际上,对于固定的arity操作员,在任何情况下都不需要parens。他们从来都不是有意义的,必要的代币。

但是中缀是否需要更多语法?嗯,由于运算符优先级,此2 × (3 + 4)2 × 3 + 4不同。必须使用parens 来表示中缀表示法的优先级。无论您选择何种语法,都必须添加某些以消除歧义。但是在后缀(或前缀)中,这两个表达式可以用相同的令牌计数明确表示(并且始终少于中缀):2 3 × 4 +2 3 4 + ×3 4 + 2 ×

我希望能回答你的目标!