gpt4 book ai didi

raku - Perl 6 的reduce 函数和reduce 元操作符给出不同的结果

转载 作者:行者123 更新时间:2023-12-04 00:49:21 25 4
gpt4 key购买 nike

my @s=<1 2 3 2 3 4>;
say reduce {$^a < $^b}, @s;
say [<] @s;
# --------
# True
# False

我的问题有两个:
首先,为什么reduction metaoperator要处理 <运营商不同?看起来减少 metaop 估计使用了一个变量,该变量在 true 到 false 的第一次更改时保留该更改,因为:
say [\<] @s;
# ----------
# (True True True False False False)

其次,我也想在 reduce 函数中使用它,即在 reduce 函数的大括号内引入一些代码,以便它给出与 reduce 元运算符相同的结果。我该怎么做?谢谢。

最佳答案

元运算符和 reduce考虑传递给它们的运算符的关联性;在 < 的情况下,运算符正在链接。

传递自定义块时,reduce看不到它的内部,所以它退回到默认的左关联;然后它将后面的值与从 reducer 返回的 bool 值进行比较,后者被计算为 01 ,这就是结果最终为 True 的原因最后。

您可以通过将您的归约函数声明为具有链接关联性来获得您想要的语义:

my @s1 =<1 2 3 2 3 4>;
my @s2 =<1 2 3 4>;
sub my-reducer($a, $b) is assoc('chain') {
$a < $b
}
say reduce &my-reducer, @s1; # False
say reduce &my-reducer, @s2; # True

关于raku - Perl 6 的reduce 函数和reduce 元操作符给出不同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58301850/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com