내가 싫어하는 한, 하이퍼 연산자 »
은 map()
의 지름길입니다. 왜 다음과 같은 결과가 나올까요? 두 번째 예제에서는 .sum
이 적용되지 않는 것 같습니다.Perl6 hyper»연산자가지도처럼 작동하지 않습니다.
say ([1,2], [2, 2], [3, 3]).map({.sum});
# (3 4 6)
say ([1,2], [2, 2], [3, 3])».sum;
# ([1 2] [2 2] [3 3])
내가 싫어하는 한, 하이퍼 연산자 »
은 map()
의 지름길입니다. 왜 다음과 같은 결과가 나올까요? 두 번째 예제에서는 .sum
이 적용되지 않는 것 같습니다.Perl6 hyper»연산자가지도처럼 작동하지 않습니다.
say ([1,2], [2, 2], [3, 3]).map({.sum});
# (3 4 6)
say ([1,2], [2, 2], [3, 3])».sum;
# ([1 2] [2 2] [3 3])
하이퍼 스는 재귀 적으로 하위 목록으로 내려갑니다. 또한 그들은 자동 작업 (NYI)을위한 후보자로서 그들의 작전이 순조롭게 진행되지 않는다는 것을 의미합니다.
또한 https://github.com/rakudo/rakudo/commit/c8c27e93d618bdea7de3784575d867d9e7a2f6cb으로 수정 된 버그가있었습니다.
say ([1,2], [2, 2], [3, 3])».sum;
# (3 4 6)
TL은, DR 당신은 거의 확실히 버그가 발생했습니다. 즉, map
과 »
하이퍼 프는 큰 차이가 있습니다.
map
은 Seq을 반환합니다. - 순환 부에 하강하지 map
데이터 구조
Seq
데이터 구조 공급되는 사용자의 각 요소를 사용자가 제공 한 코드를 적용하는 결과를 얻을 한번에 데이터 구조의 최상위)map
즉시 반환 평행 아무것도) 느리게Seq
에서 값을 가져 오는 데 필요한만큼)»
hyperop은의 데이터 구조 피연산자를 반환 그 좌측 제 데이터 구조의 요소의 오른쪽에서 단항 연산을 적용한 후 :
) 전체 데이터 구조에 적용되었을 때 임의의 순서로 llel) 열심히
map
호출 달리 하이퍼 연산 만 반환 그래서 hyperoperation은 내려 오지 않기를 선택할 것입니다.) 또는 데이터 구조는 오직 하나의 깊이만큼 깊이가 있습니다. (그래서 hyperoperation이 하강하기위한 더 낮은 레벨의 잎이 없습니다) 그리고 hyperoperation과 단항 연산자를 가진 map
의 차이점은 순차/병렬 및 지연/열망 측면. sum
은 노드 조작자 여야합니다. 그렇지 않으면 개별 나뭇잎에 도착할 때까지 하위 구조로 내려 가며 무의미한 단일 값 묶음에 적용되게됩니다. ETA : 이제 수정 된 것 같습니다.
모두 사실이지만, hyperoperator가 하부 구조로 반드시 내려갈 필요는 없습니다 (cf'say ([1,2], [2, 2], [3,3]). 틀림없이,'List.sum'은'is nodal' 주석이 없습니다 ... – Christoph