2016-12-10 10 views
5

मेरे पास एक विशेष कार्य है जो एक सूची लेता है, सूची के प्रत्येक सदस्य को कई आवश्यकताओं को पूरा करना होगा। मैं इसे एक perl6 फ़ंक्शन में कैसे सेट करूं?perl6: फ़ंक्शन के पैरामीटर के लिए एकाधिक आवश्यकताएं कैसे निर्दिष्ट करें?

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; 

आपकी मदद के लिए धन्यवाद !!

lisprog

उत्तर

7

पर्ल 6 प्रकार प्रणाली इतनी छूट एलान के तौर पर उन बाधाओं को व्यक्त करने के लिए नहीं है, लेकिन आप एक कस्टम अभिव्यक्ति के खिलाफ भेजे तर्क की जाँच करने के लिए अपने पैरामीटर के लिए एक where खंड जोड़ सकते हैं।

स्पष्टता के लिए, मैं बाहर अभिव्यक्ति एक 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) { 
    ... 
} 

आप एक कदम आगे जा सकते हैं, और एक subset में पूरी where खंड को अलग:

subset SpecialList of List where .all ~~ SpecialNumber; 

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

पीएस: मुझे लगता है कि आपकी आवश्यकता (5) अनावश्यक हो सकती है, क्योंकि आवश्यकता (6) केवल अजीब संख्याओं को संतुष्ट करती है, लेकिन मैं संख्या सिद्धांत पर बड़ा नहीं हूं इसलिए मुझे यकीन नहीं है।

+0

बहुत बहुत धन्यवाद, smls !!! मैं सहमत हूं, (6) का तात्पर्य है (5) जो अनावश्यक है। फिर से धन्यवाद ! – lisprogtor

संबंधित मुद्दे