减少 Perl 6 中的逻辑运算符
Reducing logical operators in Perl 6
我正在尝试减少 and
并得到一个奇怪的输出:
> [and] 2>1, 3>2, put 1, put 2
2
1True
与此同时,如果我在每个表达式之间放置 and
,则一切正常。
> 2>1 and 3>2 and put 1 and put 2
1
2
造成这种差异的原因是什么?
详细说明 Håkon 的评论。区别在于优先级。
这两个语句等价于:
> [and] (2>1), (3>2), (put 1,(put 2))
2
1True
> (2>1) and (3>2) and (put 1) and (put 2)
1
2
在第一种情况下,它首先评估 put 2
,打印 2
并返回 True
,然后 put 1,True
,打印 1True
,返回True
。整个表达式的计算结果为 True
,但不再打印任何内容。
在第二种情况下,put 1
首先求值,打印 1
并返回 True
,然后 put 2
求值,打印 2
并返回 True
。同样,整个表达式的计算结果为 True 但不再打印任何内容。
我正在尝试减少 and
并得到一个奇怪的输出:
> [and] 2>1, 3>2, put 1, put 2
2
1True
与此同时,如果我在每个表达式之间放置 and
,则一切正常。
> 2>1 and 3>2 and put 1 and put 2
1
2
造成这种差异的原因是什么?
详细说明 Håkon 的评论。区别在于优先级。
这两个语句等价于:
> [and] (2>1), (3>2), (put 1,(put 2))
2
1True
> (2>1) and (3>2) and (put 1) and (put 2)
1
2
在第一种情况下,它首先评估 put 2
,打印 2
并返回 True
,然后 put 1,True
,打印 1True
,返回True
。整个表达式的计算结果为 True
,但不再打印任何内容。
在第二种情况下,put 1
首先求值,打印 1
并返回 True
,然后 put 2
求值,打印 2
并返回 True
。同样,整个表达式的计算结果为 True 但不再打印任何内容。