हास्केल में दो कार्य हैं जो किसी एक मूल्य को कम करने के लिए वस्तुओं की सूची पर एक ऑपरेशन करने की अनुमति देते हैं। (निश्चित रूप से दो से अधिक हैं, लेकिन ये दो हैं जिनमें मुझे रूचि है।) वे foldl1
और foldr1
हैं। यदि ऑपरेशन किया जाना है commutative (जैसे अतिरिक्त), इससे कोई फर्क नहीं पड़ता कि आप इनमें से किस का उपयोग करते हैं। नतीजा वही होगा। हालांकि, यदि ऑपरेशन कम्यूटेटिव (उदा।, घटाव) है, तो दोनों उत्पाद बहुत अलग परिणाम उत्पन्न करते हैं। उदाहरण के लिए:जे में हास्केल के फ़ोल्ड 1 को कार्यान्वित करने का सबसे प्रभावी तरीका क्या है?
foldr1 (-) [1..9]
foldl1 (-) [1..9]
पहले का जवाब 5 और दूसरा, -43 है। foldr1
की जम्मू बराबर डालने क्रिया विशेषण, /
, उदाहरण के लिए,
-/ 1+i.9
जो foldr1 (-) [1..9]
के बराबर है। मैं जे में एक क्रियाविधि बनाना चाहता हूं जो सम्मिलित विज्ञापन की तरह काम करता है, लेकिन दाईं ओर बाएं गुना है। सबसे अच्छा मैं के साथ आ सकता है निम्नलिखित है:
foldl =: 1 : 'u~/@|.'
इस प्रकार, एक कह सकते हैं:
- foldl 1+i.9
और मिल -43 जवाब है, जो है क्या एक छोड़ दिया गुना से आशा की जाती है के रूप में।
क्या जे में ऐसा करने का कोई बेहतर तरीका है? किसी कारण से, y
तर्क को उलटना मेरे लिए प्रभावी प्रतीत नहीं होता है। शायद इसका सहारा लेने के बिना ऐसा करने का कोई तरीका है।
मुझे नहीं पता कि सरणी फिसलने के अलावा चीज जैसी कोई चीज है, भले ही यह कितना व्यावहारिक लगे। कोई सोचता है (या आशा करता है) हास्केल ऐसा नहीं करता है और केवल अंत से कार्य करता है ... – MPelletier
मेरा मतलब था "कोई फर्क नहीं पड़ता कि कैसे अप्रचलित है।" – MPelletier