एक व्यावहारिक दृष्टिकोण से कॉम्बिनेटर एक तरह के प्रोग्रामिंग निर्माण हैं जो आपको दिलचस्प और अक्सर उन्नत शिष्टाचार में तर्क के टुकड़ों को एक साथ रखने की अनुमति देते हैं। आमतौर पर उनका उपयोग करना वस्तुओं में निष्पादन योग्य कोड को पैक करने में सक्षम होने की संभावना पर निर्भर करता है, जिसे अक्सर (ऐतिहासिक कारणों के लिए) लंबा फ़ंक्शन या लैम्ब्डा एक्सप्रेशन कहा जाता है, लेकिन आपका माइलेज अलग-अलग हो सकता है।
(उपयोगी) कॉम्बीनेटर का एक सरल उदाहरण वह है जो मापदंडों के बिना दो लंबो कार्यों को लेता है, और एक नया बनाता है जो उन्हें क्रम में चलाता है। वास्तविक कॉम्बिनेटर जेनेरिक छद्मकोड में इस तरह दिखता है:
func in_sequence(first, second):
lambda ():
first()
second()
महत्वपूर्ण बात यह है कि यह एक संयोजन बनाता है दूसरी पंक्ति पर अनाम फ़ंक्शन (लैम्ब्डा फ़ंक्शन) है; जब तुमने फोन किया
a = in_sequence(f, g)
परिणामी वस्तु a पहले f () और फिर g () चलाने का परिणाम नहीं है, लेकिन यह एक ऐसी वस्तु है जिसे आप बाद में f () और g () क्रम से निष्पादित करने के लिए कॉल कर सकते हैं:
a() // a is a callable object, i.e. a function without parameters
आप तब समान रूप से एक कॉम्बिनेटर रख सकते हैं जो समानांतर में दो कोड ब्लॉक चलाता है:
func in_parallel(first, second):
lambda ():
t1 = start_thread(first)
t2 = start_thread(second)
wait(t1)
wait(t2)
और फिर,
a = in_parallel(f, g)
a()
अच्छी बात यह है कि 'in_parallel' और 'in_fterence' दोनों एक ही प्रकार / सिग्नेचर वाले कॉम्बिनेटर हैं, अर्थात ये दोनों दो पैरामीटर रहित फंक्शन ऑब्जेक्ट्स लेते हैं और एक नया लौटाते हैं। आप वास्तव में तब जैसी चीजें लिख सकते हैं
a = in_sequence(in_parallel(f, g), in_parallel(h, i))
और यह उम्मीद के मुताबिक काम करता है।
मूल रूप से इसलिए कॉम्बिनेटर आपको एक प्रक्रियात्मक और लचीले फैशन में अपने कार्यक्रम के नियंत्रण प्रवाह (अन्य चीजों के बीच) का निर्माण करने की अनुमति देते हैं। उदाहरण के लिए, यदि आप अपने प्रोग्राम में समानता को चलाने के लिए in_parallel (..) कॉम्बिनेटर का उपयोग करते हैं, तो आप उस से संबंधित डीबगिंग को in_parallel combinator के कार्यान्वयन से जोड़ सकते हैं। बाद में, यदि आपको संदेह है कि आपके कार्यक्रम में समानता-संबंधी बग है, तो आप वास्तव में in_parallel को फिर से लागू कर सकते हैं:
in_parallel(first, second):
in_sequence(first, second)
और एक झटके के साथ, सभी समानांतर वर्गों को अनुक्रमिक लोगों में बदल दिया गया है!
सही इस्तेमाल होने पर कॉम्बिनेटर बहुत उपयोगी होते हैं।
हालांकि, वाई कॉम्बिनेटर को वास्तविक जीवन में ज़रूरत नहीं है। यह एक कॉम्बीनेटर है जो आपको स्व-पुनरावर्ती कार्यों को बनाने की अनुमति देता है, और आप उन्हें वाई कॉम्बिनेटर के बिना किसी भी आधुनिक भाषा में आसानी से बना सकते हैं।