Perl6 22/30
Perl6가 시퀀스를 추론 할 수 있는지 살펴 보겠습니다.
이를 위해 Perl6에 내장 된 REPL을 사용했습니다.
$ perl6
> 1,2,4,7...*
Unable to deduce arithmetic or geometric sequence from 2,4,7 (or did you really mean '..'?)
> 1,2,4,7,10...*
1 2 4 7 10 13 16 19 22 25 28 31 34 37 40 43 46 49 52 55 58 61 64 67 70 ...
흠, 나는 펄이 추론 한 패턴을 본다. 4 다음에 다음 값을 얻으려면 3을 추가하십시오.
1,2,4,*+3...*
이는 한 문자를 저장하여 13 자 길이의 Stöhr 시퀀스에서 무한한 숫자 목록을 가져옵니다.
이 코드 는 결과 의 요지 를 인쇄하기 때문에 REPL에서 유용한 기능 만 수행합니다 . 달리 인쇄하려면 결과를 인쇄하도록 Perl에 명시 적으로 지시해야합니다.
$ perl6 -e 'say 1,2,4,*+3...*'
( * + 3
단순히 인수에 추가 된 3을 반환하는 코드 참조를 얻는 방법입니다. 다른 방법은 { $_ + 3 }
, 또는 -> $i { $i + 3 }
, { $^i + 3 }
또는 sub ($i){ $i + 3 }
)입니다.
처음 n 개의 요소 를 생성 하기 위해 Callable 을 생성하는 가장 짧은 방법 은 요소의 슬라이스를 얻는 것입니다.
{(1,2,4,*+3...*)[^$_]} # 22
빈 공간에서 첫 번째 $_
값을 생성하면 즉시 버립니다.
void 컨텍스트 이외의 것에서는 하나의 인수를 취하는 익명 코드 블록 (name이없는 기본 서브 루틴)을 만듭니다.
# store it in a scalar variable
my $sub = {(1,2,4,*+3...*)[^$_]};
say $sub.(5);
# 1 2 4 7 10
# use it immediately
say {(1,2,4,*+3...*)[^$_]}.(5);
# 1 2 4 7 10
# pretend it always had a name
my &Stöhr-first = {(1,2,4,*+3...*)[^$_]};
say Stöhr-first 5;
이 챌린지에 유효한 자격을 갖추려면 이름이 있어야한다고 생각한다면 다음과 같이하십시오.
sub s(\n){(1,2,4,*+3...*)[^n]} # 30
s
대체 연산자에도 사용 되기는하지만 이를 호출하는 것은 선택적이지 않습니다. (당신은 내가 생각하는 다른 이름을 줄 수 있습니다)
say s(5);
# 1 2 4 7 10