Perl 6 で「リスト内包表記」を使用して、非平方 (つまり、平方根が整数ではない整数) のリストを作成するにはどうすればよいですか? 非正方形のリストを印刷する方法を示すRosetta Code から次のコードに出くわしました。
sub nth_term (Int $n) { $n + round sqrt $n }
say nth_term $_ for 1 .. 22;
リスト内包表記についての私の理解では、プログラミング言語でリストを記述するにはset-builder notationに似た宣言的な方法です。
これまでに気づいた最も近いことは、for
キーワードの使用です。しかし、これは実際には単なるインライン ループであるため、似ているように見えますが、技術的にはリスト内包表記ではないと思いました。
my @y = ($_**2 + 1 for 1 .. 10);
しかし、私が本当に知りたいのは、非正方形などの数学的に記述可能なリストを作成する「リスト内包表記」の方法があるかどうかです。非正方形のリストを命令的に作成する方法は次のとおりです(最大30):
my @non_squares = grep {sqrt($_) != floor(sqrt($_))}, 1 .. 30;
リスト内包表記としてこれを行うにはどうすればよいですか?