2016-12-10 9 views
5

Mam specjalną funkcję, która pobiera listę, każdy członek listy musi spełniać wiele wymagań. Jak ustawić to w funkcji perl6?perl6: jak określić wiele wymagań dla parametru funkcji?

sub specialFunc(List $x) {}; 

(1) $x is a list # easy, List $x, but what about the following: 
(2) each member of $x is numeric 
(3) each member of $x is positive 
(4) each member of $x is greater than 7 
(5) each member of $x is odd number 
(6) each member of $x is either the square or the cube of an even number plus 1; 

Dziękuję za pomoc !!

lisprog

Odpowiedz

7

Perl 6 System typu nie jest wystarczająco elastyczna, aby wyrazić takich ograniczeń deklaratywnie, ale można dodać where klauzuli do parametru, by sprawdzić przychodzące argumenty przeciwko niestandardowych wypowiedzi.

Dla jasności chciałbym czynnik poza ekspresją do testowania każdego numeru w subset:

subset SpecialNumber of Numeric where { 
     $_ > 7      # (3), (4) 
    && $_ !%% 2      # (5), since "odd" implies "not even" 
    && .narrow ~~ Int    # (5), since "odd" implies "integer" 
    && ($_ - 1) ** (1/2 | 1/3) %% 2 # (6) 
} 

sub specialFunc(List $x where .all ~~ SpecialNumber) { 
    ... 
} 

Można pójść o krok dalej i czynnik z całą where klauzuli do subset:

subset SpecialList of List where .all ~~ SpecialNumber; 

sub specialFunc(SpecialList $x) { 
    ... 
} 

PS: Myślę, że twoje wymaganie (5) może być zbyteczne, ponieważ wymaganie (6) wydaje się jedynie spełniać liczby nieparzyste, ale nie jestem zbytnio skoncentrowany na teorii liczb, więc nie jestem pewien.

+0

Dziękuję bardzo, MMS !!! Zgadzam się (6) oznacza (5), że jest zbędny. Jeszcze raz dziękuję ! – lisprogtor

Powiązane problemy