Raku의

Raku의 (&)/∩ — 집합의 교집합 연산자

여러 집합에서 공통으로 들어 있는 요소만 뽑고 싶을 때가 있어요. &(영어 'and'에서 온 표기)와 (수학의 교집합 기호)는 그 일을 하는 교집합(인터섹션) 연산자예요.

출처: Raku 공식 문서 — routine (&), infix ∩

시그니처

multi infix:<(&)>(**@p)

&는 왼쪽 인자 'and' 오른쪽 인자라는 데서 온 이름이에요. 모든 인자의 교집합을 돌려줘요.

인자가 모두 Set 계열일 때

인자 중 어느 것도 Bag, BagHash, Mix, MixHash가 아니라면, 모든 인자에 공통인 요소만 담은 새 Set을 만들어요.

say <a b c> (&) <b c d>; # OUTPUT: «Set(b c)␤»
say <a b c d> ∩ <b c d e> ∩ <c d e f>; # OUTPUT: «Set(c d)␤»

Bag/Mix이 섞이면 가중치까지 고려해요

인자 중 BaggyMixy가 하나라도 있으면, 결과는 공통 요소를 담은 새 Bag(또는 Mix)이 돼요. 이때 각 요소의 가중치는 모든 인자에서 그 요소가 가진 가중치 중 최솟값(즉 가장 큰 공통 가중치)으로 정해져요.

say <a a b c a> (&) bag(<a a b c c>); # OUTPUT: «Bag(a(2) b c)␤»

a의 경우 왼쪽에 3번, 오른쪽 Bag에 2번 들어 있어서 교집합에선 최솟값인 2로 남는 모습이에요.