চার্চ বিয়োগ
লাম্বদা ক্যালকুলাস সর্বদা আমার প্রতি আকর্ষনীয় এবং একে অপরের মধ্যে ফাংশনগুলি পাস করার উদীয়মান আচরণগুলি আনন্দদায়ক জটিল। চার্চের সংখ্যাগুলি হ'ল প্রাকৃতিক সংখ্যার প্রতিনিধিত্ব যা কোনও ক্রিয়াকলাপের পুনরাবৃত্তি প্রয়োগ (সাধারণত ধ্রুবকের অবিচ্ছিন্ন সংযোজন) থেকে নির্ধারিত হয়। উদাহরণস্বরূপ, শূন্য সংখ্যা এক্স প্রদান করে এবং ইনপুট ফাংশনটিকে "উপেক্ষা করে", একটি হ'ল f(x)
, দুটি হয় f(f(x))
এবং আরও:
ident = lambda x: x
zero = lambda f: ident
succ = lambda n: lambda f: lambda x: f(n(f)(x))
one = succ(zero)
add1 = lambda x: x + 1
to_int = lambda f: f(add1)(0)
print(to_int(one))
>>> 1
এটি থেকে আমরা সহজেই দেখতে পাচ্ছি যে এক্সটি প্রথম ফাংশন প্রয়োগ করে এক্সটিতে দ্বিতীয় ফাংশন প্রয়োগ করে সংযোজন সম্পন্ন হয়েছে:
add = lambda m: lambda n: lambda f: lambda x: n(f)(m(f)(x))
print(to_int(add(one)(two)))
>>> 3
সংযোজন বুঝতে অপেক্ষাকৃত সহজ। তবে, একজন নতুন আগত ব্যক্তির পক্ষে চার্চ এনকোডেড নম্বর সিস্টেমে বিয়োগ কীভাবে দেখায় তা ভেবে অবর্ণনীয়। কোনও ফাংশন আন-প্রয়োগ করার সম্ভাব্য অর্থ কী হতে পারে?
চ্যালেঞ্জ
চার্চের এনকোডেড সংখ্যা ব্যবস্থায় বিয়োগ ফাংশনটি প্রয়োগ করুন। যেখানে বিয়োগটি মনাস অপারেশন সম্পাদন করে এবং n
ফলশ্রুতি বার প্রয়োগ করে যদি ফলাফলটি শূন্য বা শূন্যের চেয়ে বেশি হয় অন্যথায়। এটি কোড-গল্ফ তাই সংক্ষিপ্ততম কোডের জয়।
ইনপুট
দুটি চার্চ সংখ্যা যা আপনার ভাষার পছন্দ অনুসারে এনকোড করা হয়েছে। ইনপুট অবস্থানগত বা তরকারিযুক্ত হতে পারে। এগুলো সত্য চার্চ সংখ্যাসমূহ প্রমাণ তারা কোনো ফাংশনে গ্রহণ করা এবং তাদের বারবার আবেদন করতে হবে ( add1
উদাহরণ দেওয়া হয় কিন্তু এটা হতে পারে add25
, mult7
, বা অন্য কোন ইউনারী ফাংশন।)
আউটপুট
একটি চার্চ সংখ্যা। এটি লক্ষ করা উচিত যে m < n
তারপর m - n
যদি সর্বদা পরিচয় ফাংশন একই হয়।
উদাহরণ:
minus(two)(one) = one
minus(one)(two) = zero
...
গ্রহণযোগ্য:
minus(two, one) = one
minus(one, two) = zero
ক্রেডিট:
এই গিথুব আমাকে চার্চ সংখ্যার অজগর বাস্তবায়ন দেওয়ার জন্য সূচনা করলেন।
lambda m,n,f:apply f m-n times
(বা এমনকি lambda m,n,f,x:apply f m-n times to x
) হিসাবে সংজ্ঞায়িত করা কি ঠিক lambda m,n:lambda f:...
? অথবা এটি কেবলমাত্র দুটি ইনপুটগুলির জন্য প্রযোজ্য m
এবং n
?
m
এবং n
অন্য ক্রমে নিতে পারি? এটি তরঙ্গকরণে সহায়তা করবে।
exp(m, n)
গণনা করেm^n
))