एक साधारण उदाहरण के रूप में, मान लीजिए कि मेरे पास L
संख्याओं की एक सूची है और मैं कुछ विशिष्ट संख्या से अधिक पहला तत्व ढूंढना चाहता हूं X
। मैं इस तरह सूची comprehensions के साथ ऐसा कर सकता है:एरलांग: कुछ स्थितियों से मेल खाने वाली सूची में पहला तत्व (शेष तत्वों का मूल्यांकन किए बिना)
([email protected])24> L = [1, 2, 3, 4, 5, 6].
[1,2,3,4,5,6]
([email protected])25> X = 2.5.
2.5
([email protected])26> [First | _] = [E || E <- L, E > X].
[3,4,5,6]
([email protected])27> First.
3
लेकिन इस संभावित बहुत अक्षम लगता है, के बाद से सूची बहुत लंबी हो सकती है और पहले मैच जल्दी पर हो सकता है। तो मैं सोच रहा हूं कि या तो ए) क्या ऐसा करने का कोई प्रभावी तरीका है जो पहले मैच के बाद सूची में शेष तत्वों का मूल्यांकन नहीं करेगा? या बी) जब यह संकलित हो जाता है, तो क्या एरलांग बाकी तुलनाओं को किसी भी तरह से अनुकूलित करता है?
यह मैं कैसे प्राप्त होगा मैं सी में के लिए क्या देख रहा हूँ है:
int first_match(int* list, int length_of_list, float x){
unsigned int i;
for(i = 0; i < length_of_list, i++){
if(x > list[i]){ return list[i]; } /* immediate return */
}
return 0.0; /* default value */
}
अच्छा। यह मेरे समाधान से अधिक संक्षिप्त है। मुझे यह सत्यापित करने के लिए थोड़ा सा प्रयास करना पड़ा कि 'असफल' वास्तव में पहले असफल मैच के बाद मूल्यांकन करना बंद कर देता है। मैंने इसे एक फ़ंक्शन में लपेट लिया जो आपको एक फ़ंक्शन के रूप में स्थिति निर्दिष्ट करने देता है (तर्क को उलटा किए बिना): https://gist.github.com/3807110 – dantswain