日期:2014-05-20  浏览次数:20856 次

前缀表达式 如何描述 三元运算符
前缀表达式: 一种可以将  普通的运算式 描述成 堆栈执行顺序 的表达式(特别适合计算机或者算法的理解)

比如 :
a+b            --->       +,a,b 
a+(b-c)        --->       +,a,-,b,c 
a+(b-c)*d      --->       +,a,*,-,b,c,d 
a=1+3          --->       =,a,+,1,3

那么我想知道:
2+2>1 ? 5 : 6     这该如何 描述成   前缀表达式??

------解决方案--------------------
这是三元运算,你只需要将 2+2>1 描述即可,后面那个是条件判断
------解决方案--------------------
随便你,比如说你用?表示可以叫
? > + 2 2 1 5 6
------解决方案--------------------
不要把前缀运算看得多神秘

其实就是我们经常写的函数调用,去掉括号。
+ 1 1 其实就是+(1, 1),如果+是一个合法的函数名,相当于Add(1, 1)
那么
2+2>1 ? 5 : 6
其实就是
IfTrueThenEqualsFirstElseSecond(GreaterThan(Add(2, 2), 1), 5, 6)
把这些函数名用符号表示(对于三元运算,事实上只要一个符号就可以了,我们用?,:相当于界符,不需要写了)
?(>(+(2, 2), 1), 5, 6)
最后我们不写括号了
? > + 2 2 1 5 6
就行了。
为什么可以不写括号?因为作为运算符的函数的参数个数是确定的。
所谓二元运算,就是2个参数的函数,所谓三元运算,就是3个参数的函数。
事实上,你写程序连10元运算都用过了,那就是10个参数的函数。

看看,简单吧。
------解决方案--------------------
引用:
随便你,比如说你用?表示可以叫
? > + 2 2 1 5 6


是的。
------解决方案--------------------