perl6.suОсвоим perl6 к 2015 году!

if


       Раньше после if надо было обязательно ставить скобку. Сейчас нет.
    
#!/usr/bin/perl6
my $unus=1; my $duo=2;
if ($duo > $unus) {say 'Bene!'}
if $duo >= $unus {say 'Sic!'}
Bene!
Sic!

       Понятненько. Ещё парой ударов по клавиатуре будет меньше. Вот скажем:
    
#!/usr/bin/perl6
my $tres='tres';
if $tres {say 1}
1

       Как раньше, то в строке 3 надо было бы поставить на два символа поставить больше (на 12,5%!) Хотя опять настроение нам портит необходимость обязательно ставить my.
# mutatio postrema: 8 Aug 2010


       Восклицательный знак служит для отрицания чего-то.
    
#!/usr/bin/perl6
my $check=5;
if !$check {"$check not checked".say} else {"$check checked".say}
$check=0;
if !$check {"$check not checked".say} else {"$check checked".say}
$check=-99;
if !$check {"$check not checked".say} else {"$check checked".say}
$check='';
if !$check {"$check not checked".say} else {"$check checked".say}
$check='Brain';
if !$check {"$check not checked".say} else {"$check checked".say}
$check=' ';
if !$check {"$check not checked".say} else {"$check checked".say}
$check='checked';
if !($check ne 'checked') {"checked".say} else {"not checked".say}
if !$check ne 'checked' {"checked".say} else {"not checked".say}
5 checked
0 not checked
-99 checked
 not checked
Brain checked
  checked
checked
checked

       Пробел - истинен.
       Отрицаемое суждение не обязательно заключать в скобки, хотя для большей ясности желательно.
# mutatio postrema: 2 Sep 2010


       Сколько будет знаков, если разделить 1 на 0?
    
#!/usr/bin/perl6
(1/0).say;
Inf

       Вот это на самом деле круто. В каком-то смысле математика - это наука о бесконечном, а оперировать этой бесконечностью раньше было непонятно как. Теперь Inf вроде бы - полноправное число, наравне с 0, 5.3 или даже 17.
    
#!/usr/bin/perl6
my $num=Inf;
$num.say;
say $num-10;
say $num+20;
say $num+$num;
$num.sin.say;
if $num > 100500 { 'major'.say }
Inf
Inf
Inf
Inf
NaN
major

       Очевидно, имеется минус бесконечность.
    
#!/usr/bin/perl6
my $num=-Inf;
$num.say;
say $num-10;
say $num+20;
say $num+$num;
$num.sin.say;
if $num < -100500 { 'minor'.say }
-Inf
-Inf
-Inf
-Inf
NaN
minor

       Ну и самое интересное - действия с несколькими бесконечностями.
    
#!/usr/bin/perl6
say Inf+(-Inf);
say Inf/Inf;
say Inf*Inf;
say Inf+Inf+(-Inf);
say 0/Inf;
say 2**Inf;
NaN
NaN
Inf
NaN
0
Inf

       Возможно, с помощью каких-нибудь прагм можно вернуть стандартное "Illegal division by zero", но очевидно же, что использование бесконечности может сделать процесс программирования еще гибче и интереснее.
    
#!/usr/bin/perl6
my $x; my $y=10;
while -1 < $x < Inf {
	$y--;
	$x=1/$y;
	$x.say;
	}
0.111111111111111
0.125
0.142857142857143
0.166666666666667
0.2
0.25
0.333333333333333
0.5
1
Inf

       Если нас пугает возможность получения бесконечного значения, то можно устроить обычную проверку, используя Inf как число. Предположим, что на нашей латифундии зарплата рабов зависит от выброса двух игральных костей...
    
#!/usr/bin/perl6
# "IC. Tabulator" - все права защищены.
my $i;
loop  { $i++;
	my $alea_unus=6.rand.ceiling;
	my $alea_duo=6.rand.ceiling;
	my $denarii=(3600/($alea_unus-$alea_duo)).floor;
	"$alea_unus $alea_duo  Servus $i meruit $denarii denarios".say;
	last if $denarii == Inf;
	}
say "Servus {$i+1} et ceteri denarios non ceperit\n";
3 4  Servus 1 meruit -3600 denarios
3 4  Servus 2 meruit -3600 denarios
1 6  Servus 3 meruit -720 denarios
4 3  Servus 4 meruit 3600 denarios
5 4  Servus 5 meruit 3600 denarios
2 1  Servus 6 meruit 3600 denarios
6 4  Servus 7 meruit 1800 denarios
2 6  Servus 8 meruit -900 denarios
5 6  Servus 9 meruit -3600 denarios
3 4  Servus 10 meruit -3600 denarios
1 5  Servus 11 meruit -900 denarios
1 5  Servus 12 meruit -900 denarios
4 4  Servus 13 meruit Inf denarios
Servus 14 et ceteri denarios non ceperit

       Аналогично можно писать что-то вроде: if $denarii == NaN (то есть если зарплата носит не количественный, а качественный характер).
# mutatio postrema: 23 Oct 2011

   !, числа, if      charta situs       nota VI, nota XLIV, nota XCI   

    RSS     stdin@perl6.su    © Alexius Karmanov, 2010-2011