Как я могу создать список неквадратов (то есть целых чисел, чьи квадратные корни не являются целыми числами), используя «понимание списка» в Perl 6? Я наткнулся на следующий код из Rosetta Code, показывающий, как распечатать список неквадратов .
sub nth_term (Int $n) { $n + round sqrt $n }
say nth_term $_ for 1 .. 22;
Мое понимание понимания списка таково, что это декларативный способ, похожий на нотацию set-builder , чтобы описать список на языке программирования.
Самое близкое, что я заметил до сих пор, это использование ключевого слова for
. Но поскольку на самом деле это просто встроенный цикл, я подумал, что технически это не понимание списка, хотя это кажется похожим:
my @y = ($_**2 + 1 for 1 .. 10);
Но что мне действительно хотелось бы знать, так это то, существует ли способ «понимания списка» для создания любого математически описываемого списка, такого как неквадраты. Вот как я бы императивно создал список неквадратов (до 30):
my @non_squares = grep {sqrt($_) != floor(sqrt($_))}, 1 .. 30;
Как я мог сделать это как понимание списка?