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 ...
うーん、Perlが推測したパターンが見えます。4の後に次の値を取得するには、3を追加します。
1,2,4,*+3...*
これは、1文字を保存してコードを作成し、13文字のシュトールシーケンス内の数値の無限リストを取得します。
このコードは結果の要点を出力するため、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コンテキストでは、すぐにそれらを破棄します。
voidコンテキスト以外では、1つの引数を取る匿名コードブロック(名前のない基本サブルーチン)を作成します。
# 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