Raku의 abs — 절댓값 구하기
Raku의 abs — 절댓값 구하기
어떤 수의 부호를 떼고 크기만 필요할 때가 있죠. abs는 그런 일을 하는 루틴으로, 호출자(또는 서브 형태에서는 인자)를 Numeric으로 강제 변환한 뒤 절댓값(음이 아닌 수)을 돌려줘요. 아주 기본적인 수학 루틴이라 여러 타입·역할에 걸쳐 정의돼 있는데 하나씩 볼게요.
Cool에서
Cool 계층에서는 인자를 Numeric으로 강제 변환하고 절댓값을 구합니다. 서브 형태는 Numeric() $x처럼 받아서 처리하죠.
sub abs(Numeric() $x)
method abs()
say (-2).abs; # OUTPUT: «2»
say abs "6+8i"; # OUTPUT: «10»
"6+8i"는 문자열이지만 Numeric으로 강제 변환되면서 복소수 6+8i로 해석되고, 그 크기가 10으로 나오는 걸 볼 수 있어요.
role Numeric에서
Numeric 역할 쪽에서는 방향성(defined)이 보장된 형태로 정의돼 있어요.
multi abs(Numeric:D --> Real:D)
multi method abs(Numeric:D: --> Real:D)
숫자의 절댓값을 반환합니다.
Complex에서
Complex에서는 절댓값이 곧 복소수의 크기예요. 주어진 복소수 $z에 대해 |$z|는 sqrt($z.re * $z.re + $z.im * $z.im)으로 정의돼요.
method abs(Complex:D: --> Num:D)
multi abs(Complex:D $z --> Num:D)
say (3+4i).abs; # OUTPUT: «5»
# sqrt(3*3 + 4*4) == 5
3+4i의 크기가 sqrt(9+16), 즉 5로 나오는 걸 확인할 수 있어요.