前缀表达式 如何描述 三元运算符
前缀表达式: 一种可以将 普通的运算式 描述成 堆栈执行顺序 的表达式(特别适合计算机或者算法的理解)
比如 :
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个参数的函数。
看看,简单吧。
------解决方案--------------------
是的。
------解决方案--------------------