减少元运算符不一致
Reduction meta-operator inconsistency
当我们检查 reduce 函数时:
my $result = reduce &reduction_procedure, @array;
我们总结了以下内部工作原理的简单规则:
Reduction Rules
---------------
1. For the first pair of objects from our input (@array)
we apply the reduction procedure (&reduction_procedure) and we get our first result.
2. We apply the reduction procedure (&reduction_procedure) to the result (object)
of the previous rule and the next input (object) from our input (@array),
and we get an intermediate result (object).
3. We run rule.2 for every of the remaining objects from our input (@array)
这个简单的规则对于归约元运算符[] 也同样有效。例如:
example.1
---------
say [+] [1,2,3,4]; # result : 10
例如。1 减少规则按原样适用:
Step.1 use Rule.1 : 1 + 2 = 3 1(first value) + 2(second value) = 3
Step.2 use Rule.2 : 3 + 3 = 6 3(previous result) + 3(current value) = 6
Step.3 use Rule.2 : 6 + 4 = 10 6(previous result) + 4(current value) = 10
但不适用于以下示例:
example.2
----------
say [<] 1,2,3,4; # result : True
例如.2 我们观察到一个不一致:
Step.1 use Rule.1 : 1 < 2 = True 1(first value) < 2(second value) = True
Step.2 use Rule.2 : 2 < 3 = True True(previous result) && True(current result) = True
Step.3 use Rule.2 : 3 < 4 = True True(previous result) && True(current result) = True(result)
不一致的是,从Step.2开始,我们不能将上一步的结果作为后续reduce操作的第一个参数,
但是我们使用实际值计算一个逻辑中间结果,最后我们在最后一步添加 "logical AND"
每一步的中间逻辑结果:
Reduction Result = True && True && True = True (use of logical AND as "meta-reduction" operator)
可以说我们有一个 "meta-reduction" 元运算符!
问题:
1. Is that an inconsistency with a purpose?
2. Can we exploit this behavior? For instance instead of use of && (logical AND)
as "meta-reduction" operator can we use || (logical OR) or ?^ (logical XOR) ?
这不是不一致,而是 operator associativity 如何在 Raku 中工作的示例。
写作:
[<] 1,2,3,4
写法一样:
1 < 2 < 3 < 4
在大多数语言中这是行不通的,但是 < 运算符具有链结合性,因此它有效地将其视为 :
(1 < 2) and (2 < 3) and (3 < 4)
这是真的。
当我们检查 reduce 函数时:
my $result = reduce &reduction_procedure, @array;
我们总结了以下内部工作原理的简单规则:
Reduction Rules
---------------
1. For the first pair of objects from our input (@array)
we apply the reduction procedure (&reduction_procedure) and we get our first result.
2. We apply the reduction procedure (&reduction_procedure) to the result (object)
of the previous rule and the next input (object) from our input (@array),
and we get an intermediate result (object).
3. We run rule.2 for every of the remaining objects from our input (@array)
这个简单的规则对于归约元运算符[] 也同样有效。例如:
example.1
---------
say [+] [1,2,3,4]; # result : 10
例如。1 减少规则按原样适用:
Step.1 use Rule.1 : 1 + 2 = 3 1(first value) + 2(second value) = 3
Step.2 use Rule.2 : 3 + 3 = 6 3(previous result) + 3(current value) = 6
Step.3 use Rule.2 : 6 + 4 = 10 6(previous result) + 4(current value) = 10
但不适用于以下示例:
example.2
----------
say [<] 1,2,3,4; # result : True
例如.2 我们观察到一个不一致:
Step.1 use Rule.1 : 1 < 2 = True 1(first value) < 2(second value) = True
Step.2 use Rule.2 : 2 < 3 = True True(previous result) && True(current result) = True
Step.3 use Rule.2 : 3 < 4 = True True(previous result) && True(current result) = True(result)
不一致的是,从Step.2开始,我们不能将上一步的结果作为后续reduce操作的第一个参数, 但是我们使用实际值计算一个逻辑中间结果,最后我们在最后一步添加 "logical AND" 每一步的中间逻辑结果:
Reduction Result = True && True && True = True (use of logical AND as "meta-reduction" operator)
可以说我们有一个 "meta-reduction" 元运算符!
问题:
1. Is that an inconsistency with a purpose?
2. Can we exploit this behavior? For instance instead of use of && (logical AND)
as "meta-reduction" operator can we use || (logical OR) or ?^ (logical XOR) ?
这不是不一致,而是 operator associativity 如何在 Raku 中工作的示例。
写作:
[<] 1,2,3,4
写法一样:
1 < 2 < 3 < 4
在大多数语言中这是行不通的,但是 < 运算符具有链结合性,因此它有效地将其视为 :
(1 < 2) and (2 < 3) and (3 < 4)
这是真的。