Adr*_*aan 7 arrays matlab parsing unary-operator
继上加上运营商这个问题,我有一个跟进的问题.我们知道之间的区别plus和uplus,因而认为1+2解析3,就像1++2甚至1++++++++2.奇怪的事情发生在数组语法中,请考虑以下示例:
>> [1 ++ 2]
ans =
1 2 % Two unary plusses
>> [1 + + 2]
ans =
3 % A normal plus and a unary one
>> [1++2]
ans =
3 % A normal plus and a unary one
Run Code Online (Sandbox Code Playgroud)
同样适用于多个加号[1 +++..+++ 2],因此在中间连续生成[1 2]所有加号时,所有其他组合(据我测试)都会产生3.
据我所知,空间在MATLAB中的重要性有限; exp(3*x/y)是一样的exp( 3 * x / y ).它们在创建数组时有用:[1 2]将生成1- by- 2数组,还有一些其他用途,但分离运算符不是其中之一.
因此,我的问题是:为什么要这样做[1 ++ 2]并以[1 + + 2]不同
请注意,minus并且uminus具有相同的行为,并且解析器足够神奇,可以[1;;;3++ + + +--+ + ++4,;;;,;]完美地解析[1;7].
我怀疑这与数字文字的解析方式有关.特别要考虑以下复杂的例子:
>> [1+2i]
ans =
1.0000 + 2.0000i
>> [1 +2i]
ans =
1.0000 + 0.0000i 0.0000 + 2.0000i
>> [1 + 2i]
ans =
1.0000 + 2.0000i
Run Code Online (Sandbox Code Playgroud)
作为数组分隔符的空间与作为复数的一部分的空间之间存在冲突.
我相信解析器是这样编写的,它试图尽可能合理地理解复数(与复杂数组相比).在解析涉及加/减和空格的表达式时,这很容易导致非平凡的行为.
更具体一点:
1 ++ 2可能会解析为1 +2,因为多个一元加号仍然是一元加号,而一元加号只能作用于2.
但是1 + + 2可能会解析1 + (+ 2)后者加上作为一元加号消耗的情况,留下1 + 2哪个是单个"复杂"数字.
在@Adriaan的好奇评论后进一步跟进:
[...]
[1 ++ + 2]是[1 2]的,但[1 + ++ 2]为3
所以我的正确猜测是解析器从右向左移动.
[1 ++ + 2]- > [1 ++ (+ 2)]- > [1 ++ 2],对比[1 + ++ 2]- > [1 + (++ 2)]- > [1 + 2].这也意味着任何组合[1 + ...2](在第一个连接的加号块中只有一个加号)会给你,[3]而如果第一个加号块包含两个或更多,你会得到[1 2].一些伪随机测试似乎验证了这种行为.
当然,直到The MathWorks使他们的解析器开源或记录我们只能猜测.
| 归档时间: |
|
| 查看次数: |
99 次 |
| 最近记录: |