फिक्स्ड-पॉइंट कॉम्बिनेटर

सामान्य रूप से गणित और कंप्यूटर विज्ञान में, एक फ़ंक्शन का एक निश्चित बिंदु (गणित) एक मान होता है जिसे फ़ंक्शन द्वारा स्वयं मैप किया जाता है।

कंप्यूटर विज्ञान के लिए संयोजन तर्क में, एक 'नियत-बिंदु संयोजक' (या 'फिक्सपॉइंट संयोजक') एक उच्च-क्रम का कार्य है $$\textsf{fix}$$ जो इसके तर्क कार्य के कुछ निश्चित बिंदु लौटाता है, यदि कोई मौजूद है।

औपचारिक रूप से, यदि फ़ंक्शन f में एक या अधिक निश्चित बिंदु हैं, तो
 * $$\textsf{fix}\ f = f\ (\textsf{fix}\ f)\ ,$$

और इसलिए, बार-बार आवेदन करके,
 * $$\textsf{fix}\ f = f\ (f\ ( \ldots f\ (\textsf{fix}\ f) \ldots))\ .$$

वाई कॉम्बिनेटर
शास्त्रीय अप्रकाशित लैम्ब्डा कैलकुलस में, प्रत्येक फ़ंक्शन का एक निश्चित बिंदु होता है।

फिक्स का एक विशेष कार्यान्वयन है हास्केल करी | करी का विरोधाभासी कॉम्बिनेटर वाई, द्वारा दर्शाया गया कार्यात्मक प्रोग्रामिंग में, वाई कॉम्बिनेटर का उपयोग प्रोग्रामिंग भाषा में औपचारिक रूप से रिकर्सन (कंप्यूटर विज्ञान)  को परिभाषित करने के लिए किया जा सकता है जो रिकर्सन का समर्थन नहीं करता है।
 * $$\textsf{Y} = \lambda f. \ (\lambda x.f\ (x\ x))\ (\lambda x.f\ (x\ x))\ .$$

इस कॉम्बिनेटर का उपयोग करी के विरोधाभास को लागू करने में किया जा सकता है। करी के विरोधाभास का दिल यह है कि अनटाइप्ड लैम्ब्डा कैलकुलस एक डिडक्टिव सिस्टम के रूप में अस्वास्थ्यकर है, और वाई कॉम्बिनेटर एक अनाम अभिव्यक्ति को शून्य, या यहां तक ​​​​कि कई मूल्यों का प्रतिनिधित्व करने की अनुमति देकर इसे प्रदर्शित करता है। यह गणितीय तर्क में असंगत है।

एक चर के साथ एक फ़ंक्शन पर लागू, Y संयोजक आमतौर पर समाप्त नहीं होता है। Y संयोजक को दो या दो से अधिक चर के कार्यों में लागू करने से अधिक दिलचस्प परिणाम प्राप्त होते हैं। अतिरिक्त चर का उपयोग काउंटर या इंडेक्स के रूप में किया जा सकता है। परिणामी फ़ंक्शन अनिवार्य भाषा में जबकि या के लिए लूप की तरह व्यवहार करता है।

इस तरह प्रयोग किया जाता है, वाई संयोजक सरल पुनरावर्तन लागू करता है। लैम्ब्डा कैलकुस में, नाम से अपने शरीर के अंदर किसी फ़ंक्शन की परिभाषा को संदर्भित करना संभव नहीं है। पुनरावर्तन हालांकि उसी फ़ंक्शन को एक तर्क के रूप में पारित करके प्राप्त किया जा सकता है, और फिर उस तर्क का उपयोग फ़ंक्शन के स्वयं के नाम का उपयोग करने के बजाय पुनरावर्ती कॉल करने के लिए किया जाता है, जैसा कि उन भाषाओं में किया जाता है जो मूल रूप से पुनरावर्तन का समर्थन करते हैं। वाई कॉम्बिनेटर प्रोग्रामिंग की इस शैली को प्रदर्शित करता है।

दो भाषाओं में वाई कॉम्बिनेटर के कार्यान्वयन का एक उदाहरण नीचे प्रस्तुत किया गया है।

<वाक्यविन्यास लैंग = पायथन लाइन = 1>
 * 1) पायथन में वाई कॉम्बिनेटर

वाई = लैम्ब्डा एफ: (लैम्ब्डा एक्स: एफ (एक्स (एक्स))) (लैम्ब्डा एक्स: एफ (एक्स (एक्स)))

Y Y) 

<वाक्यविन्यास लैंग = सीपीपी लाइन = 1> // सी ++ में वाई कॉम्बिनेटर

मुख्य प्रवेश बिंदु { ऑटो वाई = [] (ऑटो एफ) { ऑटो f1 = [f](ऑटो x) -> decltype(f) { // यहां एक प्रिंट स्टेटमेंट डाला जा सकता है, // यह देखने के लिए कि हमें एक अनंत लूप मिलता है // (कम से कम स्टैक ओवरफ्लो होने तक) वापसी एफ (एक्स (एक्स)); };       वापसी एफ 1 (एफ 1); };

Y Y); } 

फिक्स्ड-पॉइंट कॉम्बिनेटर
Y कॉम्बिनेटर लैम्ब्डा कैलकुलस में एक निश्चित-बिंदु कॉम्बिनेटर का कार्यान्वयन है। फिक्स्ड-पॉइंट कॉम्बिनेटर को अन्य कार्यात्मक और अनिवार्य भाषाओं में भी आसानी से परिभाषित किया जा सकता है। लैम्ब्डा कैलकुलस में सीमाओं के कारण लैम्ब्डा कैलकुलस में कार्यान्वयन अधिक कठिन है। फिक्स्ड-पॉइंट कॉम्बिनेटर का उपयोग कई अलग-अलग क्षेत्रों में किया जा सकता है:
 * अंक शास्त्र
 * लैम्ब्डा कैलकुलस टाइप किया
 * टाइप लैम्ब्डा कैलकुस
 * कार्यात्मक प्रोग्रामिंग
 * अनिवार्य प्रोग्रामिंग

फिक्स्ड-पॉइंट कॉम्बिनेटर को विभिन्न कार्यों की एक श्रृंखला पर लागू किया जा सकता है, लेकिन सामान्य रूप से तब तक समाप्त नहीं होगा जब तक कोई अतिरिक्त पैरामीटर न हो। जब तय किया जाने वाला फ़ंक्शन इसके पैरामीटर को संदर्भित करता है, तो फ़ंक्शन के लिए एक और कॉल शुरू हो जाती है, इसलिए गणना कभी शुरू नहीं होती है। इसके बजाय, गणना की शुरुआत को ट्रिगर करने के लिए अतिरिक्त पैरामीटर का उपयोग किया जाता है।

निश्चित बिंदु का प्रकार निश्चित होने वाले फ़ंक्शन का रिटर्न प्रकार है। यह एक वास्तविक या एक कार्य या कोई अन्य प्रकार हो सकता है।

अनटाइप्ड लैम्ब्डा कैलकुलस में, फिक्स्ड-पॉइंट कॉम्बिनेटर को लागू करने के लिए फ़ंक्शन को एन्कोडिंग का उपयोग करके व्यक्त किया जा सकता है, जैसे चर्च एन्कोडिंग। इस मामले में विशेष लैम्ब्डा शब्द (जो कार्यों को परिभाषित करते हैं) को मान के रूप में माना जाता है। एन्कोडिंग पर फिक्स्ड-पॉइंट कॉम्बिनेटर चलाना (बीटा कम करना) परिणाम के लिए लैम्ब्डा शब्द देता है जिसे तब निश्चित-बिंदु मान के रूप में व्याख्या किया जा सकता है।

वैकल्पिक रूप से, एक फ़ंक्शन को लैम्ब्डा कैलकुस में पूरी तरह परिभाषित लैम्ब्डा शब्द के रूप में माना जा सकता है।

ये अलग-अलग दृष्टिकोण इस बात को प्रभावित करते हैं कि एक गणितज्ञ और एक प्रोग्रामर एक निश्चित-बिंदु कॉम्बिनेटर को कैसे मान सकते हैं। लैम्ब्डा कैलकुलस गणितज्ञ किसी फ़ंक्शन पर लागू Y कॉम्बिनेटर को निश्चित-बिंदु समीकरण को संतुष्ट करने वाली अभिव्यक्ति और इसलिए एक समाधान के रूप में देख सकता है।

इसके विपरीत, एक व्यक्ति केवल कुछ सामान्य प्रोग्रामिंग कार्य के लिए एक निश्चित-बिंदु कॉम्बिनेटर लागू करना चाहता है, इसे केवल पुनरावर्तन को लागू करने के साधन के रूप में देख सकता है।

मान और डोमेन
प्रत्येक अभिव्यक्ति का एक मूल्य होता है। यह सामान्य गणित में सच है और लैम्ब्डा कैलकुस में यह सच होना चाहिए। इसका मतलब यह है कि लैम्ब्डा कैलकुलस में, एक निश्चित-बिंदु कॉम्बिनेटर को एक फ़ंक्शन पर लागू करने से आपको एक अभिव्यक्ति मिलती है जिसका मान फ़ंक्शन का निश्चित बिंदु होता है।

हालाँकि, यह डिडक्टिव लैम्ब्डा कैलकुलस # सेट थ्योरिटिक डोमेन में एक मान है, यह फ़ंक्शन के डोमेन में किसी भी मान के अनुरूप नहीं हो सकता है, इसलिए व्यावहारिक अर्थों में यह आवश्यक रूप से फ़ंक्शन का एक निश्चित बिंदु नहीं है, और केवल में लैम्ब्डा कैलकुस डोमेन यह समीकरण का एक निश्चित बिंदु है।

उदाहरण के लिए विचार करें
 * $$x^2 = -1 \Rightarrow x = \frac{-1}{x} \Rightarrow f\ x = \frac{-1}{x} \land \mathsf Y\ f = x$$

चर्च एन्कोडिंग # चर्च एन्कोडिंग का विभाजन # हस्ताक्षरित संख्या चर्च एन्कोडिंग में लागू की जा सकती है, इसलिए f को लैम्ब्डा शब्द द्वारा दर्शाया जा सकता है। इस समीकरण का वास्तविक संख्याओं में कोई हल नहीं है। परंतु सम्मिश्र संख्याओं के क्षेत्र में i और -i हल हैं। यह दर्शाता है कि दूसरे डोमेन में समीकरण के समाधान हो सकते हैं। हालाँकि, उपरोक्त समीकरण के समाधान के लिए लैम्ब्डा शब्द उससे अधिक निराला है। लैम्ब्डा शब्द $$\mathsf Y\ f$$ उस अवस्था का प्रतिनिधित्व करता है जहाँ x या तो i या -i हो सकता है, एक मान के रूप में। डोमेन के परिवर्तन में इन दो मूल्यों को अलग करने वाली जानकारी खो गई है। ध्यान दें कि यह अभी भी एकल मान के रूप में दर्शाया जा सकता है, यदि तर्क को Paraconsistent तर्क के रूप में विस्तारित किया गया है।

लैम्ब्डा कैलकुलस गणितज्ञ के लिए, यह लैम्ब्डा कैलकुलस की परिभाषा का परिणाम है। प्रोग्रामर के लिए, इसका मतलब है कि लैम्ब्डा शब्द की बीटा कमी हमेशा के लिए लूप हो जाएगी, कभी भी सामान्य रूप तक नहीं पहुंच पाएगी।

कार्य बनाम कार्यान्वयन
फिक्स्ड-पॉइंट कॉम्बिनेटर को गणित में परिभाषित किया जा सकता है और फिर अन्य भाषाओं में लागू किया जा सकता है। सामान्य गणित अपने विस्तार गुणों के आधार पर एक फ़ंक्शन को परिभाषित करता है। अर्थात्, यदि वे समान मानचित्रण करते हैं तो दो कार्य समान होते हैं। लैम्ब्डा कैलकुलस और प्रोग्रामिंग लैंग्वेज फंक्शन आइडेंटिटी को जानबूझकर परिभाषा प्रॉपर्टी के रूप में मानते हैं। किसी फ़ंक्शन की पहचान उसके कार्यान्वयन पर आधारित होती है।

लैम्ब्डा कैलकुस फ़ंक्शन (या टर्म) गणितीय फ़ंक्शन का कार्यान्वयन है। लैम्ब्डा कैलकुलस में कई कॉम्बिनेटर (कार्यान्वयन) हैं जो एक निश्चित-बिंदु कॉम्बिनेटर की गणितीय परिभाषा को पूरा करते हैं।

कॉम्बिनेटर शब्द की परिभाषा
संयोजन तर्क एक उच्च-क्रम कार्य सिद्धांत है। एक संयोजक एक बंद लैम्ब्डा अभिव्यक्ति है, जिसका अर्थ है कि इसमें कोई मुक्त चर नहीं है। कॉम्बिनेटरों को अभिव्यक्ति में उनके सही स्थानों पर सीधे मूल्यों के साथ जोड़ा जा सकता है, उन्हें कभी भी चर के रूप में नाम दिए बिना।

प्रोग्रामिंग में उपयोग
फ़ंक्शन की पुनरावर्ती परिभाषा को लागू करने के लिए फिक्स्ड-पॉइंट कॉम्बिनेटर का उपयोग किया जा सकता है। हालांकि, व्यावहारिक प्रोग्रामिंग में उनका उपयोग शायद ही कभी किया जाता है। सामान्य रूप से टाइप किए गए लैम्ब्डा कैलकुस जैसे सामान्य रूप से सामान्यीकृत प्रकार सिस्टम गैर-समाप्ति को अस्वीकार करते हैं और इसलिए फिक्स्ड-पॉइंट कॉम्बिनेटर को अक्सर एक प्रकार नहीं सौंपा जा सकता है या जटिल प्रकार सिस्टम सुविधाओं की आवश्यकता नहीं होती है। इसके अलावा फिक्स्ड-पॉइंट कॉम्बिनेटर अक्सर रिकर्सन को लागू करने के लिए अन्य रणनीतियों की तुलना में अक्षम होते हैं, क्योंकि उन्हें अधिक फ़ंक्शन कटौती की आवश्यकता होती है और पारस्परिक रूप से पुनरावर्ती परिभाषाओं के प्रत्येक समूह के लिए एक टपल का निर्माण और अलग करना पड़ता है।

फैक्टोरियल फ़ंक्शन
फैक्टोरियल फ़ंक्शन एक अच्छा उदाहरण प्रदान करता है कि फिक्स्ड-पॉइंट कॉम्बिनेटर कैसे लागू किया जा सकता है। परिणाम सरल पुनरावर्तन प्रदर्शित करता है, जैसा कि एक अनिवार्य भाषा में एक लूप में लागू किया जाएगा। प्रयुक्त संख्याओं की परिभाषा चर्च कोडिंग में समझाई गई है।

पैरामीटर के रूप में खुद को लेने वाला कार्य है
 * $$F\ f\ n = (\operatorname{IsZero}\ n)\ 1\ (\operatorname{multiply}\ n\ (f\ (\operatorname{pred}\ n)))\ .$$

यह Y F n के रूप में देता है
 * $$\begin{align} \textsf{fix}\ F\ n

&= F\ (\textsf{fix}\ F)\ n \\ &= (\operatorname{IsZero}\ n)\ 1\ (\operatorname{multiply}\ n\ ((\textsf{fix}\ F)\ (\operatorname{pred}\ n)))\ .\end{align}$$ सेटिंग $$\textsf{fix}\ F = \operatorname{fact}$$ देता है
 * $$\operatorname{fact}\ n = (\operatorname{IsZero}\ n)\ 1\ (\operatorname{multiply}\ n\ (\operatorname{fact}\ (\operatorname{pred}\ n)))\ .$$

यह परिभाषा F को पुनरावृत्त होने वाले लूप के शरीर की भूमिका में रखती है, और फैक्टोरियल की गणितीय परिभाषा के बराबर है:
 * $$\operatorname{fact}\ n = \begin{cases}

1 & \text{if} ~ n = 0 \\ n \times \operatorname{fact} \ (n - 1) & \text{otherwise.} \end{cases}$$

लैम्ब्डा कैलकुलस
में फिक्स्ड-पॉइंट कॉम्बिनेटर

Haskell Curry|Haskell B. Curry द्वारा खोजे गए Y कॉम्बिनेटर को इस रूप में परिभाषित किया गया है
 * $$Y = \lambda f.(\lambda x.f\ (x\ x)) \ (\lambda x.f\ (x\ x))$$

बीटा कमी से हमारे पास: बार-बार इस समानता को लागू करने से मिलता है:
 * $$Y\ g = g\ (Y\ g) = g\ (g\ (Y\ g)) = g\ (\ldots g\ (Y\ g) \ldots)$$

(उपरोक्त समानता को बाएं से दाएं बहु-चरण β-कटौती के अनुक्रम के रूप में माना जाना चाहिए। लैम्ब्डा शब्द $$g\ (Y\ g)$$ हो सकता है, सामान्य तौर पर, β-पद तक कम न हो $$Y\ g$$. दोनों दिशाओं में जाने की अनुमति देने के लिए बहु-चरण β-कटौती के बजाय समानता के संकेतों को β-तुल्यता के रूप में व्याख्या कर सकते हैं।)

फिक्स्ड-पॉइंट कॉम्बिनेटर की समतुल्य परिभाषा
इस निश्चित-बिंदु कॉम्बिनेटर को y के रूप में परिभाषित किया जा सकता है
 * $$x = f\ x \land y\ f = x$$

y के लिए एक अभिव्यक्ति लेट एक्सप्रेशन से नियमों का उपयोग करके प्राप्त की जा सकती है# गणित में परिभाषा दें। सबसे पहले, नियम का उपयोग करना
 * $$(\exists x E \land F) \iff \operatorname{let} x : E \operatorname{in} F$$

देता है
 * $$\operatorname{let} x = f\ x \operatorname{in} y\ f = x$$

साथ ही, प्रयोग कर रहा है
 * $$x \not \in \operatorname{FV}(E) \land x \in \operatorname{FV}(F) \to \operatorname{let} x : G \operatorname{in} E\ F = E\ (\operatorname{let} x : G \operatorname{in} F)$$

देता है
 * $$y\ f = \operatorname{let} x = f\ x \operatorname{in} x$$

और फिर डिडक्टिव लैम्ब्डा कैलकुलस#Eta रिडक्शन को गणित के नियम के रूप में उपयोग करना
 * $$f\ x = y \iff f = \lambda x.y$$

देता है
 * $$y = \lambda f.\operatorname{let} x = f\ x \operatorname{in} x$$

वाई कॉम्बिनेटर की व्युत्पत्ति
करी के वाई कॉम्बिनेटर को आसानी से वाई की परिभाषा से प्राप्त किया जा सकता है। हम शुरू करते हैं
 * $$\lambda f.\operatorname{let} x = f\ x \operatorname{in} x$$

एक लैम्ब्डा अमूर्त लागू अभिव्यक्ति में चर नाम के संदर्भ का समर्थन नहीं करता है, इसलिए x को x के पैरामीटर के रूप में पारित किया जाना चाहिए। हम इसे x के स्थान पर x x के रूप में सोच सकते हैं, लेकिन औपचारिक रूप से यह सही नहीं है। इसके बजाय y को परिभाषित करना $$\forall z, y\ z = x$$ देता है
 * $$\lambda f.\operatorname{let} y\ z = f\ (y\ z) \operatorname{in} y\ z\ .$$

लेट एक्सप्रेशन को फंक्शन y की परिभाषा के रूप में माना जा सकता है, जहाँ z पैरामीटर है। कॉल में y के रूप में तात्कालिकता z देता है
 * $$\lambda f.\operatorname{let} y\ z = f\ (y\ z) \operatorname{in} y\ y\ .$$

और, क्योंकि पैरामीटर z हमेशा फ़ंक्शन y पास करता है,
 * $$\lambda f.\operatorname{let} y\ z = f\ (z\ z) \operatorname{in} y\ y\ .$$

डिडक्टिव लैम्ब्डा कैलकुलस#Eta रिडक्शन को गणित के नियम के रूप में उपयोग करना,
 * $$f\ x = y \equiv f = \lambda x.y\ ,$$

देता है
 * $$\lambda f.\operatorname{let} y = \lambda z.f\ (z\ z) \operatorname{in} y\ y\ .$$

ए लेट एक्सप्रेशन # लेट डेफिनिशन इन मैथमेटिक्स; का उपयोग करते हुए
 * $$n \not \in FV(E) \to (\operatorname{let} n = E \operatorname{in} L \equiv (\lambda n.L)\ E)$$

देता है
 * $$\lambda f.(\lambda y.y\ y)\ (\lambda z.f\ (z\ z))\ .$$

यह संभवतः लैम्ब्डा कैलकुलस में फिक्स्ड-पॉइंट कॉम्बिनेटर का सबसे सरल कार्यान्वयन है। हालांकि, एक बीटा कमी करी के वाई कॉम्बिनेटर का अधिक सममित रूप देती है:
 * $$\lambda f.(\lambda z.f\ (z\ z))\ (\lambda z.f\ (z\ z))\ .$$

लेट एक्सप्रेशन#रूपांतरण को लैम्ब्डा एक्सप्रेशन में भी देखें।

अन्य फिक्स्ड-पॉइंट कॉम्बिनेटर
अनटाइप्ड लैम्ब्डा कैलकुलस फिक्स्ड-पॉइंट कॉम्बिनेटर विशेष रूप से दुर्लभ नहीं हैं। वास्तव में उनमें से अपरिमित रूप से बहुत से हैं। 2005 में मेयर गोल्डबर्ग ने दिखाया कि अनटाइप्ड लैम्ब्डा कैलकुलस के फिक्स्ड-पॉइंट कॉम्बिनेटर्स का सेट पुनरावर्ती रूप से गणनीय है। Y कॉम्बिनेटर को SKI कॉम्बिनेटर कैलकुलस सेल्फ-एप्लीकेशन एंड रिकर्सन SKI-कैलकुलस में व्यक्त किया जा सकता है |
 * $$Y = S (K (S I I)) (S (S (K S) K) (K (S I I)))$$

अतिरिक्त कॉम्बिनेटर (बी, सी, के, डब्ल्यू सिस्टम) बहुत छोटी परिभाषा के लिए अनुमति देते हैं। U = SII के साथ स्व-अनुप्रयोग कॉम्बिनेटर, चूंकि S(Kx)yz = x(yz) = Bxyz और Sx(Ky)z = xzy = Cxyz, उपरोक्त बन जाता है
 * $$Y = S (K U) (S B (K U)) = B U (C B U)$$

जॉन ट्रोम्प द्वारा खोजे गए एसके-कैलकुलस में सबसे सरल फिक्स्ड-पॉइंट कॉम्बिनेटर है
 * $$Y' = S S K (S (K (S S (S (S S K)))) K)$$

हालांकि ध्यान दें कि यह सामान्य रूप में नहीं है, जो लंबा है। यह कॉम्बिनेटर लैम्ब्डा एक्सप्रेशन से मेल खाता है
 * $$Y' = (\lambda x y. x y x) (\lambda y x. y (x y x))$$

निम्नलिखित निश्चित-बिंदु कॉम्बिनेटर Y कॉम्बिनेटर की तुलना में सरल है, और β-Y कॉम्बिनेटर में कम हो जाता है; इसे कभी-कभी वाई संयोजक के रूप में उद्धृत किया जाता है:
 * $$X = \lambda f.(\lambda x.x x) (\lambda x.f (x x))$$

एक अन्य सामान्य फिक्स्ड-पॉइंट कॉम्बिनेटर ट्यूरिंग फिक्स्ड-पॉइंट कॉम्बिनेटर है (इसके खोजकर्ता, एलन ट्यूरिंग के नाम पर):
 * $$\Theta = (\lambda x y. y (x x y))\ (\lambda x y. y (x x y))$$

इसका फायदा खत्म $$\textsf{Y}$$ यह है कि $$\Theta\ f$$ बीटा-कम हो जाता है $$f\ (\Theta f)$$,

जबकि $$\textsf{Y}\ f$$ और $$f\ (\textsf{Y} f)$$ एक सामान्य शब्द के लिए केवल बीटा-कम करें।

$$\Theta$$ एक साधारण कॉल-बाय-वैल्यू फॉर्म भी है:
 * $$\Theta_{v} = (\lambda x y. y (\lambda z. x x y z))\ (\lambda x y. y (\lambda z. x x y z))$$

पारस्परिक पुनरावर्तन के लिए एनालॉग एक बहुभिन्नरूपी फिक्स-पॉइंट कॉम्बिनेटर है,  जिसे Y* निरूपित किया जा सकता है।

सख्त फिक्स्ड-पॉइंट कॉम्बिनेटर
एक सख्त प्रोग्रामिंग भाषा में Y कॉम्बिनेटर स्टैक ओवरफ्लो तक विस्तारित होगा, या टेल कॉल ऑप्टिमाइज़ेशन के मामले में कभी नहीं रुकेगा। जेड कॉम्बिनेटर सख्त भाषाओं में काम करेगा (जिन्हें उत्सुक भाषाएं भी कहा जाता है, जहां लागू मूल्यांकन आदेश लागू होता है)। Z कॉम्बिनेटर का अगला तर्क स्पष्ट रूप से परिभाषित है, परिभाषा के दाईं ओर Z g के विस्तार को रोकता है:
 * $$Z g v = g (Z g) v\ .$$

और लैम्ब्डा कैलकुलस में यह वाई कॉम्बिनेटर का ईटा-विस्तार है:
 * $$Z = \lambda f.(\lambda x.f (\lambda v.x x v)) \ (\lambda x.f (\lambda v.x x v))\ .$$

गैर-मानक फिक्स्ड-पॉइंट कॉम्बिनेटर
अनटाइप्ड लैम्ब्डा कैलकुलस में ऐसे शब्द होते हैं जिनमें फिक्स्ड-पॉइंट कॉम्बिनेटर के रूप में एक ही बोहम ट्री होता है, यानी उनका एक ही अनंत विस्तार λx.x (x (x ... )) होता है। इन्हें गैर-मानक निश्चित-बिंदु संयोजक कहा जाता है। कोई भी निश्चित-बिंदु कॉम्बिनेटर भी एक गैर-मानक है, लेकिन सभी गैर-मानक निश्चित-बिंदु कॉम्बिनेटर निश्चित-बिंदु कॉम्बिनेटर नहीं हैं क्योंकि उनमें से कुछ मानक को परिभाषित करने वाले समीकरण को संतुष्ट करने में विफल रहते हैं। इन अजीब कॉम्बिनेटरों को कड़ाई से गैर-मानक फिक्स्ड-पॉइंट कॉम्बिनेटर कहा जाता है; एक उदाहरण निम्नलिखित कॉम्बिनेटर है:
 * $$N = B M (B (B M) B)$$

कहाँ
 * $$B = \lambda x y z.x (y z)$$
 * $$M = \lambda x.x x\ .$$

गैर-मानक फिक्स्ड-पॉइंट कॉम्बिनेटर्स का सेट पुनरावर्ती गणना योग्य नहीं है।

अन्य भाषाओं में कार्यान्वयन
(Y कॉम्बिनेटर लैम्ब्डा कैलकुलस में फिक्स्ड-पॉइंट कॉम्बिनेटर का एक विशेष कार्यान्वयन है। इसकी संरचना लैम्ब्डा कैलकुलस की सीमाओं द्वारा निर्धारित की जाती है। अन्य भाषाओं में फिक्स्ड-पॉइंट कॉम्बिनेटर को लागू करने में इस संरचना का उपयोग करना आवश्यक या सहायक नहीं है। )

कुछ प्रोग्रामिंग प्रतिमानों में लागू फिक्स्ड-पॉइंट कॉम्बिनेटर्स के सरल उदाहरण नीचे दिए गए हैं।

आलसी कार्यात्मक कार्यान्वयन
ऐसी भाषा में जो आलसी मूल्यांकन का समर्थन करती है, जैसे हास्केल (प्रोग्रामिंग भाषा) में, फिक्स्ड-पॉइंट कॉम्बिनेटर के परिभाषित समीकरण का उपयोग करके एक निश्चित-बिंदु कॉम्बिनेटर को परिभाषित करना संभव है, जिसे पारंपरिक रूप से नामित किया गया है. चूंकि हास्केल में आलसी डेटाटाइप हैं, इसलिए इस कॉम्बिनेटर का उपयोग डेटा कंस्ट्रक्टर के निश्चित बिंदुओं को परिभाषित करने के लिए भी किया जा सकता है (और न केवल पुनरावर्ती कार्यों को लागू करने के लिए)। परिभाषा यहां दी गई है, इसके बाद कुछ उपयोग उदाहरण दिए गए हैं। हैकेज में, मूल नमूना है:

सख्त कार्यात्मक कार्यान्वयन
एक सख्त कार्यात्मक भाषा में, जैसा कि OCaml के साथ नीचे दिखाया गया है, f का तर्क पहले से विस्तारित है, एक अनंत कॉल अनुक्रम उत्पन्न करता है,
 * $$f\ (f ... (f\ (\mathsf{fix}\ f))... )\ x$$.

इसे एक अतिरिक्त पैरामीटर के साथ फ़िक्स को परिभाषित करके हल किया जा सकता है।

एक बहु-प्रतिमान कार्यात्मक भाषा में (अनिवार्य सुविधाओं से सजाया गया), जैसे लिस्प (प्रोग्रामिंग भाषा), लैंडिन (1963) फिक्स्ड-पॉइंट कॉम्बिनेटर बनाने के लिए एक वेरिएबल असाइनमेंट के उपयोग का सुझाव देता है, जैसा कि स्कीम (प्रोग्रामिंग लैंग्वेज) का उपयोग करते हुए नीचे दिए गए उदाहरण में दिया गया है:

असाइनमेंट स्टेटमेंट के लिए स्वयंसिद्धों के साथ लैम्ब्डा कैलकुलस का उपयोग करके, यह दिखाया जा सकता है  कॉल-बाय-वैल्यू वाई कॉम्बिनेटर के समान निश्चित-बिंदु कानून को संतुष्ट करता है:
 * $$(\textsf{Y}_!\ \lambda x.e) e' = (\lambda x.e)\ (\textsf{Y}_!\ \lambda x.e) e'$$

अधिक मुहावरेदार आधुनिक लिस्प उपयोग में, यह आम तौर पर एक लेक्सिकली स्कॉप्ड लेबल (ए  अभिव्यक्ति), क्योंकि 1970 के दशक तक लिस्प को  शाब्दिक गुंजाइश  पेश नहीं किया गया था:

या आंतरिक लेबल के बिना:

अनिवार्य भाषा कार्यान्वयन
यह उदाहरण फिक्स्ड-पॉइंट कॉम्बिनेटर का थोड़ा व्याख्यात्मक कार्यान्वयन है। फिक्स फ़ंक्शन को शामिल करने के लिए एक वर्ग का उपयोग किया जाता है, जिसे फिक्सर कहा जाता है। तय किया जाने वाला कार्य उस वर्ग में समाहित है जो फिक्सर से विरासत में मिला है। फिक्स फ़ंक्शन फ़ंक्शन को वर्चुअल फ़ंक्शन के रूप में ठीक करने के लिए एक्सेस करता है। सख्त कार्यात्मक परिभाषा के लिए, फिक्स को स्पष्ट रूप से एक अतिरिक्त पैरामीटर x दिया गया है, जिसका अर्थ है कि आलसी मूल्यांकन की आवश्यकता नहीं है।

टाइपिंग
सिस्टम एफ (पॉलीमॉर्फिक लैम्ब्डा कैलकुलस) में एक पॉलीमॉर्फिक फिक्स्ड-पॉइंट कॉम्बिनेटर का प्रकार होता है;
 * ∀a.(a → a) → a

जहां a एक प्रकार चर है। यही है, फिक्स एक फ़ंक्शन लेता है, जो एक → ए मैप करता है और इसका उपयोग टाइप ए के मान को वापस करने के लिए करता है।

पुनरावर्ती डेटा प्रकारों के साथ सरल रूप से टाइप किए गए लैम्ब्डा कैलकुलस में, फिक्स्ड-पॉइंट ऑपरेटर लिखे जा सकते हैं, लेकिन एक उपयोगी फिक्स्ड-पॉइंट ऑपरेटर (जिसका एप्लिकेशन हमेशा वापस आता है) का प्रकार प्रतिबंधित हो सकता है।

सरल टाइप किए गए लैम्ब्डा कैलकुस में, फिक्स्ड-पॉइंट कॉम्बिनेटर वाई को एक प्रकार नहीं सौंपा जा सकता है क्योंकि किसी बिंदु पर यह स्व-अनुप्रयोग उप-अवधि से निपटेगा $$x~x$$ आवेदन नियम द्वारा:
 * $${\Gamma\vdash x\!:\!t_1 \to t_2\quad\Gamma\vdash x\!:\!t_1}\over{\Gamma\vdash x~x\!:\!t_2}$$

कहाँ $$x$$ अनंत प्रकार है $$t_1 = t_1\to t_2$$. वास्तव में कोई फिक्स-पॉइंट कॉम्बिनेटर टाइप नहीं किया जा सकता है; उन प्रणालियों में, पुनरावर्तन के लिए किसी भी समर्थन को भाषा में स्पष्ट रूप से जोड़ा जाना चाहिए।

वाई कॉम्बिनेटर
के लिए टाइप करें

प्रोग्रामिंग भाषाओं में जो पुनरावर्ती डेटा प्रकारों का समर्थन करते हैं, टाइप स्तर पर रिकर्सन के लिए उचित रूप से लेखांकन करके वाई कॉम्बिनेटर टाइप करना संभव है। चर x को स्व-लागू करने की आवश्यकता को एक प्रकार का उपयोग करके प्रबंधित किया जा सकता है, जिसे आइसोमोर्फिक के रूप में परिभाषित किया गया है.

उदाहरण के लिए, निम्नलिखित हास्केल कोड में, हमारे पास है  और   समरूपतावाद की दो दिशाओं के नाम, प्रकारों के साथ:

जो हमें लिखने देता है:

या समकक्ष OCaml में:

वैकल्पिक रूप से:

सामान्य जानकारी
चूंकि रिकर्सन को लागू करने के लिए फिक्स्ड-पॉइंट कॉम्बिनेटर का उपयोग किया जा सकता है, इसलिए विशिष्ट प्रकार के रिकर्सिव कंप्यूटेशंस का वर्णन करने के लिए उनका उपयोग करना संभव है, जैसे फिक्स्ड-पॉइंट पुनरावृत्ति, पुनरावृत्ति विधियों, संबंध का डेटाबेस  में रिकर्सिव जॉइन, डेटा-फ्लो विश्लेषण, सबसे पहले और गैर-टर्मिनलों के एक संदर्भ-मुक्त व्याकरण, सकर्मक समापन और अन्य प्रकार के समापन (गणित) संचालन में अनुसरण करें।

एक फ़ंक्शन जिसके लिए प्रत्येक इनपुट एक निश्चित बिंदु है, एक पहचान फ़ंक्शन कहलाता है। औपचारिक रूप से:
 * $$\forall x (f\ x = x)$$

सभी पर सार्वभौमिक परिमाणीकरण के विपरीत $$x$$, एक निश्चित-बिंदु कॉम्बिनेटर एक मान बनाता है जो कि एक निश्चित बिंदु है $$f$$. फिक्स्ड-पॉइंट कॉम्बिनेटर की उल्लेखनीय संपत्ति यह है कि यह मनमाने ढंग से दिए गए फ़ंक्शन के लिए एक निश्चित बिंदु बनाता है $$f$$.

अन्य कार्यों में यह विशेष गुण होता है कि एक बार लागू होने के बाद आगे के अनुप्रयोगों का कोई प्रभाव नहीं पड़ता है। अधिक औपचारिक रूप से:
 * $$\forall x (f\ (f\ x) = f\ x)$$

ऐसे कार्यों को बेवकूफ कहा जाता है (प्रोजेक्शन (गणित) भी देखें)। ऐसे फ़ंक्शन का एक उदाहरण वह फ़ंक्शन है जो सभी सम पूर्णांकों के लिए 0 और सभी विषम पूर्णांकों के लिए 1 देता है।

लैम्ब्डा कैलकुस में, कम्प्यूटेशनल दृष्टिकोण से, एक निश्चित-बिंदु कॉम्बिनेटर को एक पहचान फ़ंक्शन या एक इम्पोटेंट फ़ंक्शन पर लागू करने से आमतौर पर नॉन-टर्मिनेटिंग कम्प्यूटेशन होता है। उदाहरण के लिए, हम प्राप्त करते हैं
 * $$(Y \ \lambda x.x) = (\lambda x.(xx) \ \lambda x.(xx))$$

जहां परिणामी शब्द केवल अपने आप को कम कर सकता है और एक अनंत लूप का प्रतिनिधित्व करता है।

कम्प्यूटेशन के अधिक प्रतिबंधात्मक मॉडल में फिक्स्ड-पॉइंट कॉम्बिनेटर आवश्यक रूप से मौजूद नहीं हैं। उदाहरण के लिए, वे केवल टाइप किए गए लैम्ब्डा कैलकुलस में मौजूद नहीं हैं।

वाई कॉम्बिनेटर पुनरावर्तन (कंप्यूटर विज्ञान) को उत्पादन (कंप्यूटर विज्ञान) के सेट के रूप में परिभाषित करने की अनुमति देता है, भाषा में देशी पुनरावर्तन समर्थन की आवश्यकता के बिना। अज्ञात कार्यों का समर्थन करने वाली प्रोग्रामिंग भाषाओं में, फिक्स्ड-पॉइंट कॉम्बिनेटर अनाम पुनरावर्तन की परिभाषा और उपयोग की अनुमति देते हैं, अर्थात ऐसे कार्यों को पहचानकर्ताओं के लिए बाध्य किए बिना। इस सेटिंग में, फिक्स्ड-पॉइंट कॉम्बिनेटर्स के उपयोग को कभी-कभी अनाम पुनरावर्तन कहा जाता है।

यह भी देखें

 * बेनामी समारोह
 * फिक्स्ड-पॉइंट पुनरावृत्ति
 * लैम्ब्डा कैलकुस रिकर्सन और निश्चित बिंदु
 * लैम्ब्डा उठाना
 * चलो अभिव्यक्ति

संदर्भ

 * Werner Kluge, Abstract computing machines: a lambda calculus perspective, Springer, 2005, ISBN 3-540-21146-2, pp. 73–77
 * Mayer Goldberg, (2005) On the Recursive Enumerability of Fixed-Point Combinators, BRICS Report RS-05-1, University of Aarhus
 * Matthias Felleisen, A Lecture on the Why of Y.

बाहरी संबंध

 * Recursion Theory and Joy, Manfred von Thun, (2002 or earlier)
 * The Lambda Calculus - notes by Don Blaheta, October 12, 2000
 * Y Combinator
 * "A Use of the Y Combinator in Ruby"
 * "Functional programming in Ada"
 * Rosetta code - Y combinator