पहले आइए देखें कि क्या सच और गलत है और क्या पहली जगह में उन्हें अर्थ देता है।
हम एक संरचना का निर्माण कर सकते हैं जिसे लैम्ब्डा कैलकुलस में एक और b c कहा जाता है जैसे कि:
(\ifThenElse. <use if then else>)(\a. \b. \c. a b c)
जावास्क्रिप्ट में, यह इस तरह दिखता है:
(function(ifThenElse) {
// use ifThenElse
})(function(a) {
return function(b) {
return function(c) {
return a(b)(c);
};
};
});
ifThenElse के लिए उपयोगी होने के लिए, हमें एक फ़ंक्शन "सही" की आवश्यकता होती है, जो दाएं या बाएं का चयन करता है, और यह करता है कि अन्य विकल्प की अनदेखी करते हुए, या "झूठा" विकल्प को चुनने वाले फ़ंक्शन को "सही" नहीं लेता है।
हम इन कार्यों को इस प्रकार परिभाषित कर सकते हैं:
(\true. <use true>)(\a. \b. a) and (\false. <use false>)(\a. \b. b)
जावास्क्रिप्ट में यह इस तरह दिखता है:
(function(True) {
// use True
})(function(a) {
return function(b) {
return a;
}
});
(function(False) {
// use True
})(function(a) {
return function(b) {
return b;
}
});
अब हम निम्नलिखित कर सकते हैं
(\true. \false. \ifThenElse. \doThis. \doThat. ifThenElse true doThis doThat)
(\a. \b. a)(\a. \b. b)(\a. \b. \c. a b c)(\a. ())(\a. ())
doThis और doThat के साथ (\ a) (a) होने के कारण lambda पथरी मुद्रण / गणित / स्ट्रिंग्स जैसी किसी भी सेवा की पेशकश नहीं करती है, हम कर सकते हैं कुछ भी नहीं कर रहे हैं और कहते हैं कि हमने इसे किया (और बाद में इसे सेवाओं के लिए बदलकर धोखा दिया। हमारी प्रणाली जो हम चाहते हैं दुष्प्रभाव प्रदान करती है)
तो चलिए इसे देखते हैं।
(function(True) {
return (function(False) {
return (function(ifThenElse) {
return (function(doThis) {
return (function(doThat) {
return ifThenElse(True)(doThis)(doThat);
});
});
});
})
})(function(a) {
return function(b) {
return a;
}
})(function(a) {
return function(b) {
return b;
}
})(function(a) {
return function(b) {
return function(c) {
return a(b)(c);
};
};
})(function(a) { console.log("you chose LEFT!"); })
(function(a) {console.log("you chose RIGHT");})();
यह एक गहरा वातावरण है जिसे सरल बनाया जा सकता है यदि हमें कई कार्यों में विभाजित करने के लिए सरणियों / मानचित्रों / तर्कों / या एक से अधिक विवरणों का उपयोग करने की अनुमति दी गई है, लेकिन मैं रखना चाहता हूं कि मैं उतना ही शुद्ध हूं जितना कि एक तर्क के कार्यों के लिए खुद को सीमित कर सकता हूं केवल।
ध्यान दें कि नाम / True / False का कोई निहित महत्व नहीं है, हम आसानी से उन्हें हां / ना, बाएँ / दाएँ, दाएँ / बाएँ, शून्य / एक, सेब / नारंगी का नाम दे सकते हैं। इसमें इस बात का महत्व है कि जो भी चुनाव किया जाता है, वह केवल उस तरह के चयनकर्ता के कारण होता है जिसे उसने बनाया है। इसलिए यदि "LEFT" छपा है, तो हम जानते हैं कि चयनकर्ता केवल सच हो सकता है, और इस ज्ञान के आधार पर हम अपने आगे के निर्णयों का मार्गदर्शन कर सकते हैं।
इसलिए संक्षेप में
function ChooseRight(left) {
return function _ChooseRight_inner(right) {
return right;
}
}
function ChooseLeft(left) {
return function _ChooseLeft_inner(right) {
return left;
}
}
var env = {
'0': ChooseLeft,
'1': ChooseRight,
'false': ChooseRight,
'true': ChooseLeft,
'no': ChooseRight
'yes': ChooseLeft,
'snd': ChooseRight,
'fst': ChooseLeft
};
var _0 = env['0'];
var _1 = env['1'];
var _true = env['true'];
var _false = env['false'];
var yes = env['yes'];
var no = env['no'];
// encodes church zero or one to boolean
function lambda_encodeBoolean(self) {
return self(false)(true);
}
// decodes a Boolean to church zero or one
function lambda_decodeBoolean(self) {
console.log(self, self ? env['true'] : env['false']);
return self ? env['true'] : env['false'];
}
lambda_decodeBoolean('one' === 'two')(function() {
console.log('one is two');
})(function() {
console.log('one is not two');
})();
lambda_decodeBoolean('one' === 'one')(function() {
console.log('one is one');
})(function() {
console.log('one is not one');
})();