উত্তর:
জ্যামাদের বর্ণিত হিসাবে প্রথমে প্রাকৃতিক সংখ্যা এবং জোড়গুলি এনকোড করুন।
একটি পূর্ণসংখ্যার কে প্রাকৃতিক সংখ্যার জোড় হিসাবে উপস্থাপন করুন যেমন । তারপর আপনি যেমন (জন্য Haskell, স্বরলিপি ব্যবহার পূর্ণসংখ্যার স্বাভাবিক অপারেশন বর্ণনা করতে পারেন -calculus):
neg = \k -> (snd k, fst k)
add = \k m -> (fst k + fst m, snd k + snd m)
sub = \k m -> add k (neg m)
mul = \k m -> (fst k * fst m + snd k * snd m, fst k * snd m + snd k * fst m)
জটিল সংখ্যার ক্ষেত্রে এই অর্থে একই রকম যে জটিল সংখ্যার রিয়ালের এক জোড়া হিসাবে এনকোড করা আছে। তবে আরও জটিল প্রশ্ন হ'ল বাস্তবগুলি কীভাবে এনকোড করা যায়। এখানে আপনাকে আরও কাজ করতে হবে:
এনকোডিং রিয়েলস অনেক কাজ এবং আপনি আসলে এটি -ক্যালকুলাসে করতে চান না । তবে উদাহরণস্বরূপ খাঁটি হাসকেলে বাস্তবের সহজ বাস্তবায়নের জন্য মার্শালেরetc/haskell
উপ-ডিরেক্টরিটি দেখুন । এটি নীতিগতভাবে খাঁটি to তে অনুবাদ করা যেতে পারে λ -ক্যালকুলাসে ।
i:ℤ
, x:a
, f,u,s:a→a
, p:(a→a,a→a)
] আপনাকে ℤ যেমন এনকোড যদি (Sign,ℕ)
তারপর, ফাংশন একজোড়া দেওয়া (s,f)
যেমন p
শব্দটি λi.λp.λx.(fst i) (fst p) id ((snd i) (snd p) x)
উত্পাদন করা হবে পারেন f(…f(x)…)
বা s(f(…f(x)…))
(ফলাফলের নেতিবাচক থাকেন)। যদি আপনি এনকোড ℤ হিসাবে করেন তবে আপনার (ℕ,ℕ)
এমন একটি ফাংশন প্রয়োজন যা একটি বিপরীতমুখী রয়েছে - একটি জোড়া দেওয়া হয় (f,u)
এবং x
, ফাংশনটি λi.λp.λx.(snd i)(snd p)((fst i)(fst p) x)
উত্পাদন u(…u(f(…f(x)…))…)
করবে যা f
প্রয়োগের i
সময়গুলি ছেড়ে যাবে x
। উভয়ই বিভিন্ন প্রসঙ্গে কাজ করে (ফলাফল "উল্টানো" হতে পারে || f
অবিচ্ছিন্ন)
fold . ctor
কোনও নির্মাণকারীর জন্য এবং সেই ধরণের fold
( r
)। (এ কারণেই, পুনরাবৃত্তির ধরণের জন্য ডেটা "নিজেরাই পুনরাবৃত্তি করবে" non পুনরাবৃত্তির ধরণের ক্ষেত্রে এটি আরও case
/ প্যাটার্নের ম্যাচের মতো ))
ল্যাম্বদা-ক্যালকুলাস বেশিরভাগ ডেটা স্ট্রাকচার এবং বেসিক ধরনেরগুলিকে এনকোড করতে পারে। উদাহরণস্বরূপ, আপনি ল্যাম্বডা ক্যালকুলাসে বিদ্যমান শর্তগুলির একটি জোড়া এনকোড করতে পারেন , একই চার্চ এনকোডিং ব্যবহার করে আপনি সাধারণত নননিজেটিভ পূর্ণসংখ্যা এবং বুলিয়ান এনকোড করতে দেখেন:
fst = λ p । p ( λ x y । x ) snd = λ p । পি ( λ x y । y )
তারপর যুগল হয় পি = ( পেয়ার একটি খ ) এবং আপনি ফিরে পেতে চাইলে দয়া একটি এবং খ আপনি কি করতে পারেন ( fst পি ) এবং ( Snd পি ) ।
এর অর্থ হ'ল আপনি সহজেই কোনও জোড় দিয়ে ইতিবাচক এবং নেতিবাচক পূর্ণসংখ্যার প্রতিনিধিত্ব করতে পারেন: বাম দিকে চিহ্ন এবং ডানদিকে পরম মান। চিহ্নটি একটি বুলিয়ান যা নির্দিষ্ট করে যে সংখ্যাটি ইতিবাচক কিনা। ডানটি চার্চ এনকোডিং ব্যবহার করে একটি প্রাকৃতিক সংখ্যা।
এবং এখন আপনি আপেক্ষিক পূর্ণসংখ্যার আছে। গুণটি নির্ধারণ করা সহজ, আপনাকে কেবলমাত্র ফাংশন প্রয়োগ করতে হবে এবং প্রাকৃতিক সংখ্যায় গুণকে পরম মানের উপর প্রয়োগ করতে হবে:
সংযোজনটি সংজ্ঞায়িত করতে, আপনাকে দুটি প্রাকৃতিক সংখ্যার তুলনা করতে হবে এবং চিহ্নগুলি পৃথক হলে বিয়োগফল ব্যবহার করতে হবে, সুতরাং এটি কোনও term-টার্ম নয় তবে আপনি যদি সত্যিই চান তবে আপনি এটি খাপ খাইয়ে নিতে পারেন:
তবে বিয়োগফলকে সংজ্ঞা দেওয়া সত্যিই সহজ:
উপ ℤ = λ একটিখ। যোগ ℤ (একটি)( মাইনাস ℤ খ)
আপনার ইতিবাচক এবং নেতিবাচক পূর্ণসংখ্যার পরে আপনি জটিল পূর্ণসংখ্যাগুলি খুব সহজেই সংজ্ঞা দিতে পারেন: এটি কেবল দুটি পূর্ণসংখ্যার একটি জুড়ি যা একটি + বি i উপস্থাপন করে । তারপরে যোগটি বিন্দু অনুসারে এবং গুণটি যথারীতি , তবে আমি এটি লিখব না, এটি সহজ হওয়া উচিত: