Λ-ক্যালকুলাস , অথবা ল্যামডা ক্যালকুলাস, একটি লজিক্যাল বেনামী ফাংশন উপর ভিত্তি করে সিস্টেম। উদাহরণস্বরূপ, এটি একটি expression-এক্সপ্রেশন:
λf.(λx.xx)(λx.f(xx))
তবে, এই চ্যালেঞ্জের উদ্দেশ্যে, আমরা স্বরলিপিটি সহজ করব:
- এটিকে পরিবর্তন
λ
করুন\
(এটি টাইপ করা সহজ করার জন্য):\f.(\x.xx)(\x.f(xx))
.
ল্যামডা হেডার এ, অপ্রয়োজনীয় তাই আমরা ড্রপ করতে পারেন:\f(\xxx)(\xf(xx))
- দুটি ফাংশন একসাথে লেখার চেয়ে অ্যাপ্লিকেশনটির জন্য আনলম্বদা- স্টাইলের উপসর্গ চিহ্নটি ব্যবহার করুন (এটি কীভাবে করবেন তার পুরো বিশদর জন্য, ল্যাম্বদা ক্যালকুলাস নোটেশনের মধ্যে রূপান্তর
`
দেখুন ):\f`\x`xx\x`f`xx
- এটি সবচেয়ে জটিল বিকল্প। কত গভীরভাবে নেস্টেড পরিবর্তনশীল ল্যামডা হেডার এটা জন্যে আপেক্ষিক উপর ভিত্তি করে বন্ধনী একটি সংখ্যা সঙ্গে প্রতিটি পরিবর্তনশীল প্রতিস্থাপন (অর্থাত 0 ভিত্তিক ব্যবহার দে Bruijn ইন্ডেক্স )। উদাহরণস্বরূপ,
\xx
(পরিচয় ফাংশন) এ,x
শরীরে অভ্যন্তরটি প্রতিস্থাপন করা হত[0]
, কারণ এটি পরিবর্তনশীল থেকে শেষ পর্যন্ত অভিব্যক্তিটি ট্র্যাভার করার সময় সম্মুখীন হওয়া প্রথম (0-ভিত্তিক) শিরোনামের অন্তর্ভুক্ত;\x\y``\x`xxxy
রূপান্তরিত হবে\x\y``\x`[0][0][1][0]
। আমরা এখন হেডারে ভেরিয়েবলগুলি ফেলে রেখে যেতে পারি\\``\`[0][0][1][0]
।
সম্মিলিত যুক্তি হ'ল মূলত ul- ক্যালকুলাস থেকে তৈরি একটি টুরিং টারপিট (ভাল, আসলে, এটি প্রথম এসেছিল, তবে এটি এখানে অপ্রাসঙ্গিক।)
"সংযুক্ত যুক্তিকে ল্যাম্বডা ক্যালকুলাসের বৈকল্প হিসাবে দেখা যেতে পারে, যেখানে ল্যাম্বডা এক্সপ্রেশনগুলি (ক্রিয়ামূলক বিমূর্ততা উপস্থাপন করে) সংমিশ্রনের একটি সীমিত সেট দ্বারা প্রতিস্থাপন করা হয়, আদিম ক্রিয়া যেখানে আবদ্ধ ভেরিয়েবলগুলি অনুপস্থিত থাকে।" 1
সংযুক্ত যুক্তির সর্বাধিক সাধারণ ধরণ হচ্ছে এসকে কম্বিনেটর ক্যালকুলাস , যা নিম্নলিখিত আদিম ব্যবহার করে:
K = λx.λy.x
S = λx.λy.λz.xz(yz)
কখনও কখনও একটি সংযুক্তকারী I = λx.x
যুক্ত করা হয়, তবে এটি রিন্ডন্ড্যান্ট, কারণ SKK
(বা প্রকৃতপক্ষে কারও SKx
জন্য x
) এর সমতুল্য I
।
,-ক্যালকুলাসে কোনও অভিব্যক্তি এনকোড করতে সক্ষম হওয়ার জন্য আপনার কেবল কে, এস এবং অ্যাপ্লিকেশন দরকার। উদাহরণস্বরূপ, এখানে ফাংশন λf.(λx.xx)(λx.f(xx))
থেকে সংযুক্ত যুক্তিকে অনুবাদ করা হয়েছে :
λf.(λx.xx)(λx.f(xx)) = S(K(λx.xx))(λf.λx.f(xx))
λx.f(xx) = S(Kf)(S(SKK)(SKK))
λf.λx.f(xx) = λf.S(Kf)(S(SKK)(SKK))
λf.S(Sf)(S(SKK)(SKK)) = S(λf.S(Sf))(K(S(SKK)(SKK)))
λf.S(Sf) = S(KS)S
λf.λx.f(xx) = S(S(KS)S)(K(S(SKK)(SKK)))
λx.xx = S(SKK)(SKK)
λf.(λx.xx)(λx.f(xx)) = S(K(S(SKK)(SKK)))(S(S(KS)S)(K(S(SKK)(SKK))))
যেহেতু আমরা উপসর্গ চিহ্নটি ব্যবহার করছি তাই এটি ```S`K``S``SKK``SKK``S``S`KSS`K``SKK`
।
1 সূত্র: উইকিপিডিয়া
চ্যালেঞ্জ
এতক্ষণে, আপনি সম্ভবত এটি অনুমান করেছেন: এসকে-সংযুক্তি ক্যালকুলাসে আবার লিখে, একই প্রোগ্রাম হিসাবে ইনপুট এবং আউটপুট (বা প্রত্যাবর্তন) হিসাবে একটি বৈধ λ-এক্সপ্রেশন (উপরে বর্ণিত স্বীকৃতিতে) গ্রহণ করে এমন একটি প্রোগ্রাম লিখুন। দ্রষ্টব্য যে এটিকে পুনরায় লেখার জন্য সীমাহীন অসংখ্য উপায় রয়েছে; আপনার কেবলমাত্র অসীম উপায়গুলির একটি আউটপুট করতে হবে।
এটি কোড-গল্ফ , সুতরাং সংক্ষিপ্ততম বৈধ জমা (বাইটগুলিতে পরিমাপ করা) জয়ী।
পরীক্ষার মামলা
প্রতিটি পরীক্ষার ক্ষেত্রে একটি সম্ভাব্য আউটপুট প্রদর্শিত হয়। শীর্ষে প্রকাশটি সমতুল্য λ-ক্যালকুলাস এক্সপ্রেশন।
λx.x:
\[0] -> ``SKK
λx.xx:
\`[0][0] -> ```SKK``SKK
λx.λy.y:
\\[0] -> `SK
λx.λy.x:
\\[1] -> K
λx.λy.λz.xz(yz):
\\\``[2][0]`[1][0] -> S
λw.w(λx.λy.λz.xz(yz))(λx.λy.x):
\``[0]\\[1]\\\``[2][0]`[1][0] -> ``S``SI`KS`KK
λx.f(xx) = S(Kf)(SKK)
? বরং এটি করা উচিত নয় λx.f(xx) = S(Kf)(SII) = S(Kf)(S(SKK)(SKK))
? রূপান্তর করার সময় λx.f(xx)
, আমি পাই S {λx.f} {λx.xx}
যা কমে যায় S (Kf) {λx.xx}
এবং বন্ধনীগুলিতে প্রকাশটি অন্য কিছু নয় ω=λx.xx
, যা আমরা জানি যে প্রতিনিধিত্ব করা হয়েছে SII = S(SKK)(SKK)
, তাই না?
SII
না SKK
। ওটা একটা ভুল ছিল.