[raku] Perl 6 기능 감소 및 메타 조작 감소로 다른 결과 제공

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

내 질문은 두 가지입니다. 첫째, 감소 메타 <운용자가 연산자를 다르게 처리하는 이유는 무엇입니까? 감소 metaop은 처음에 true에서 false로 변경 될 때 다음과 같은 이유로 해당 변경을 유지하는 변수를 사용하는 것으로 보입니다.

say [\<] @s;
# ----------
# (True True True False False False)

둘째, reduce 함수 안에 이것을 사용하고 싶습니다. 즉, reduce 함수의 중괄호 안에 코드를 도입하여 축소 메타 연산자와 동일한 결과를 얻습니다. 어떻게하니? 감사합니다.



답변

메타 운영자와 reduce그들에게 전달 된 운영자의 연관성을 고려합니다. 의 경우 <작업자가 체인을 연결하고 있습니다.

사용자 정의 블록을 전달할 때 reduce내부를 볼 수 없으므로 왼쪽 연관의 기본값으로 돌아갑니다. 그 다음에 상기 감속기 리턴 부울 numifies 대하여 이상 값을 비교 0하거나 1결과로 끝나는 이유 인 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


답변