मैं वाई-संयोजक को समझ नहीं पाया, इसलिए मैंने एक ऐसे क्रिया को कार्यान्वित करने की कोशिश की जो देशी कार्यान्वयन के बिना रिकर्सन सक्षम कर सके। कुछ सोच के बाद, मैं इस के साथ समाप्त हो गया:मैं वाई-कॉम्बिनेटर को समझ नहीं पाया, इसलिए मैंने इसे लागू करने की कोशिश की और कुछ कम काम किया, जो काम करता था। वो कैसे संभव है?
Y = λx.(λv.(x x) v)
कौन सा वास्तविक एक से भी कम है:
Y = λf.(λx.f (x x)) (λx.f (x x))
और, मेरे आश्चर्य के लिए, काम किया। कुछ उदाहरण:
// JavaScript
Y = function(x){
return function(v){
return x(x, v);
};
};
sum = Y(function(f, n){
return n == 0 ? 0 : n + f(f, n - 1);
});
sum(4);
; Scheme
(define Y (lambda (x) (lambda (v) (x x v))))
(define sum (Y
(lambda (f n)
(if (equal? n 0)
0
(+ n (f f (- n 1)))))))
(sum 4)
दोनों स्निपेट आउटपुट 10 (0 से 4 तक सारांश) अपेक्षित के रूप में।
यह क्या है, यह छोटा क्यों है और हम लंबे संस्करण को क्यों पसंद करते हैं?
उह, यह कम है, क्योंकि यह किसी अन्य भाषा में है होना चाहिए? मैं योजना में धाराप्रवाह नहीं हूं, लेकिन ऐसा लगता है कि जेएस और योजना परिभाषा बराबर हैं। आपका सवाल वास्तव में क्या है? "हम सभी सबसे छोटी भाषा में क्यों नहीं लिख रहे हैं?" – lanzz
मैं अब भी आपके हिस्से का मतलब नहीं हूं। क्या आपका मतलब जेएस भाग है क्योंकि आपने लाइनब्रेक्स या स्कीम भाग जोड़ा है क्योंकि आपने सभी लाइन ब्रेक छोड़े हैं? यह सवाल कोई समझ नहीं आता है। – Sebastian
@lanzz क्या आप वाई-कॉम्बिनेटर जानते हैं? यह दोनों भाषाओं में प्रदान किए गए उदाहरण से बड़ा है। मैंने उन्हें पोस्ट किया ताकि इसे अधिक लोगों द्वारा समझा जा सके। अगर यही कारण है कि आप नीचे आ गए हैं तो कृपया पुनर्विचार करें, आप गलत हैं। – MaiaVictor