প্রথমে সত্য এবং মিথ্যা কী এবং প্রথম স্থানটিতে তাদের কী অর্থ দেয় তা পরীক্ষা করে দেখা যাক।
নীচের মতো ল্যাম্বডা ক্যালকুলাসে যদি 'b' অন্যথায় সি বলা হয় তবে আমরা একটি কাঠামো তৈরি করতে পারি:
(\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);
};
};
});
যদি এইফেনএলসটি কার্যকর হয়, তার জন্য আমাদের একটি ফাংশন "ট্রু" দরকার যা ডান বা বাম উভয়টি বেছে নেয় এবং অন্য বিকল্পটিকে উপেক্ষা করার সময়, বা "সত্য" বিকল্পটি বেছে নেয় এমন কোনও ফাংশন "মিথ্যা" করে না।
আমরা নিম্নলিখিত হিসাবে এই ফাংশন সংজ্ঞায়িত করতে পারেন:
(\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. ())
দোটিস এবং ডুথটি হচ্ছে (\ ক। ()) কারণ ল্যাম্বদা ক্যালকুলাস কোনও মুদ্রণ / গণিত / স্ট্রিংয়ের মতো কোনও পরিষেবা সরবরাহ করে না, আমরা যা করতে পারি তা কিছুই করে না এবং বলে যে আমরা এটি করেছি (এবং পরে পরিষেবাগুলিতে প্রতিস্থাপনের মাধ্যমে প্রতারণা করব) আমাদের সিস্টেম যা পার্শ্ব প্রতিক্রিয়া প্রদান করে আমরা চাই)
সুতরাং আসুন এটি কর্মে দেখুন।
(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");})();
এটি একটি গভীর পরিবেশ যা সরল করা যেতে পারে যদি আমরা একাধিক ফাংশনগুলিতে বিভক্ত হয়ে অ্যারে / মানচিত্র / যুক্তি / বা একাধিক বিবৃতি ব্যবহার করার অনুমতি পাই তবে আমি রাখতে চাই যতটা নির্ভুল আমি নিজেকে ঠিক একটি যুক্তির ফাংশনে সীমাবদ্ধ রাখতে পারি কেবল.
লক্ষ্য করুন যে সত্য / মিথ্যা নামের কোনও অন্তর্নিহিত তাত্পর্য নেই, আমরা সহজেই তাদের নামটি হ্যাঁ / না, বাম / ডান, ডান / বাম, শূন্য / এক, আপেল / কমলাতে নামকরণ করতে পারি। এটির তাত্পর্য রয়েছে যে যে কোনও পছন্দই করা হোক না কেন এটি কেবল চয়নকারীই এটির কারণেই ঘটে। সুতরাং যদি "এলইএফটি" মুদ্রিত হয়, আমরা জানি যে চয়নকারী কেবল সত্যই হতে পারে এবং এই জ্ঞানের উপর ভিত্তি করে আমরা আমাদের পরবর্তী সিদ্ধান্তগুলি গাইড করতে পারি।
তাই সংক্ষেপে
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');
})();