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


12
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 함수의 중괄호 안에 코드를 도입하여 축소 메타 연산자와 동일한 결과를 얻습니다. 어떻게하니? 감사합니다.

답변:


17

메타 운영자와 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
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.