(~!)(!)((~)~*):((!)~^)*(:^)(~(!)~^(~)~*)(()~(~)~^~*)
এটি অনলাইন চেষ্টা করুন!(প্রোগ্রামের অংশগুলি সনাক্তকারী একটি টেস্টুয়েট এবং পাঠ্য অন্তর্ভুক্ত)
এটি খুব নিম্ন-স্তরের ইওসোলংয়ের জন্য আশ্চর্যজনকভাবে স্কোরগুলি। (চার্চ সংখ্যাগুলি, চার্চ বুলেটিয়ানস ইত্যাদি) এ কারণেই আন্ডারলোডে খুব বেশি ব্যবহৃত হয়; ভাষার সংখ্যা এবং বুলেটিয়ান অন্তর্নির্মিত হয় না এবং এটি তাদের অনুকরণ করার অন্যতম সহজ উপায় That যা বলেছিল, এটিও সাধারণ চার্চের সংখ্যা 0 এবং 1 হিসাবে এনকোড বুলিয়ানগুলি
যে কেউ বিভ্রান্ত হয়ে পড়েছে: আন্ডারলোড আপনাকে পুনরায় ব্যবহারযোগ্য ফাংশনগুলি সংজ্ঞায়িত করতে দেয়, তবে আপনাকে সাধারণ উপায়ে নাম দেয় না, তারা কেবল আর্গুমেন্ট স্ট্যাকের চারপাশে ভেসে বেড়ায় (তাই যদি আপনি পাঁচটি ফাংশন সংজ্ঞায়িত করেন এবং প্রথমে কল করতে চান তবে আপনি সংজ্ঞায়িত করেছেন, আপনাকে একটি নতুন ফাংশন লিখতে হবে যা পাঁচটি আর্গুমেন্ট গ্রহণ করে এবং এর মধ্যে পঞ্চমটি কল করে, অতঃপর একে অপর্যাপ্তভাবে অনেক যুক্তি দিয়ে কল করুন যাতে এটি ব্যবহারের জন্য অতিরিক্ত যুক্তি খুঁজে দেখায়)) তাদের কল করা তাদের ডিফল্টরূপে ধ্বংস করে দেয় তবে আপনি কলটিকে অ-ধ্বংসাত্মক করতে সংশোধন করতে পারেন (সাধারণ ক্ষেত্রে, আপনার কেবলমাত্র কলটিতে একটি কোলন যুক্ত করা দরকার, যদিও জটিল কেসগুলি আরও সাধারণ কারণ আপনার অনুলিপিগুলি নিশ্চিত করা দরকার স্ট্যাকটি আপনার পথে পাবে না), সুতরাং আন্ডারলোডের ফাংশন সমর্থনটিতে আমাদের প্রশ্ন থেকে প্রয়োজনীয় সমস্ত প্রয়োজনীয়তা রয়েছে।
ব্যাখ্যা
সত্য
(~!)
( ) Define function:
~ Swap arguments
! Delete new first argument (original second argument)
এটি একদম সোজা; আমরা যে যুক্তিটি চাই না এবং যে যুক্তিটি আমরা চাই তা থেকে সেখানে ফিরে আসি, ফেরতের মান হিসাবে পরিবেশন করা।
মিথ্যা
(!)
( ) Define function:
! Delete first argument
এটি কারও আরও সরল।
না
((~)~*)
( ) Define function:
~* Modify first argument by pre-composing it with:
(~) Swap arguments
এটির মজাদার: not
এর যুক্তিটিকে একেবারেই ডাকে না, এটি কেবল একটি ফাংশন রচনা ব্যবহার করে। এটি আন্ডারলোডের একটি সাধারণ কৌশল, যাতে আপনি আপনার ডেটা একেবারেই পরিদর্শন করেন না, আপনি কেবল এটির সাথে প্রাক-পোস্ট করে এবং পোস্ট-রচনা করে এটি কীভাবে কাজ করে তা পরিবর্তন করেন। এই ক্ষেত্রে, আমরা চলার আগে এর যুক্তিগুলি অদলবদল করতে ফাংশনটি সংশোধন করি, যা চার্চের সংখ্যাকে স্পষ্টভাবে প্রত্যাখ্যান করে।
এবং
:((!)~^)*
( ) Define function:
~^ Execute its first argument with:
(!) false
{and implicitly, our second argument}
* Edit the newly defined function by pre-composing it with:
: {the most recently defined function}, without destroying it
প্রশ্নটি অন্যান্য ফাংশনের ক্ষেত্রে ফাংশন সংজ্ঞায়িত করার অনুমতি দেয়। আমরা "এবং" পরবর্তীটি সংজ্ঞায়িত করি কারণ সম্প্রতি "না" সংজ্ঞা দেওয়া হয়েছে, এটি ব্যবহার করা তত সহজ। (এটি আমাদের স্কোর থেকে বিয়োগ করে না, কারণ আমরা মোটেও "না" নামকরণ করছি না, তবে এটি আবার সংজ্ঞাটি লেখার উপর দিয়ে বাইটস সংরক্ষণ করে one এটি কেবলমাত্র এক সময় যা একটি ফাংশন অন্যটিকে বোঝায়, কারণ কোনও ফাংশনকে উল্লেখ করে তবে সর্বাধিক সংজ্ঞায়িত করতে অনেকগুলি বাইটের দাম পড়বে))
এখানে সংজ্ঞাটি and x y = (not x) false y
। অন্য কথায়, যদি not x
, তবে আমরা ফিরে আসি false
; অন্যথায়, আমরা ফিরে y
।
অথবা
(:^)
( ) Define function:
: Copy the first argument
^ Execute the copy, with arguments
{implicitly, the original first argument}
{and implicitly, our second argument}
@ নাইট্রডন মন্তব্যগুলিতে উল্লেখ করেছেন যেগুলি or x y = x x y
সাধারণত তুলনায় খুব কম or x y = x true y
এবং এটি আন্ডারলোডেও সঠিক হতে পারে। যে একটি নির্বিকার বাস্তবায়ন হবে(:~^)
এটির , তবে আমরা এটি উল্লেখ করে একটি অতিরিক্ত বাইট গল্ফ করতে পারি যে আমরা আসল প্রথম যুক্তি বা এটির অনুলিপি চালনা করি না কেন, ফলাফল উভয়ভাবেই একই।
আন্ডারলোড আসলে স্বাভাবিক অর্থে কারিঙ সমর্থন করে না, তবে এর মতো সংজ্ঞাগুলি এটি দেখতে এটির মতো করে তোলে! (কৌশলটি হ'ল নন-সেবনকারী যুক্তিগুলি কেবল চারপাশে স্থির থাকে, তাই আপনি যে ফাংশনটি কল করছেন এটি তাদের নিজস্ব আর্গুমেন্ট হিসাবে ব্যাখ্যা করবে))
বোঝা
(~(!)~^(~)~*)
( ) Define function:
~ Swap arguments
~^ Execute the new first (original second) argument, with argument:
(!) false
{and implicitly, our second argument}
(~)~* Run "not" on the result
এখানে ব্যবহৃত সংজ্ঞাটি হ'ল implies x y = not (y false x)
। যদি y সত্য হয় তবে এটি সরল করে not false
, অর্থাৎ true
। যদি y মিথ্যা হয়, এটি এটিকে সহজতর করে not x
, এভাবে আমাদের সত্যের টেবিলটি দেয়।
not
এক্ষেত্রে , আমরা আবার ব্যবহার করছি , এবার কোডটি উল্লেখ করার পরিবর্তে এটি পুনরায় লিখে। এটি কেবল (~)~*
চারপাশে প্রথম বন্ধনী ছাড়াই সরাসরি লেখা হয়েছে , সুতরাং এটি সংজ্ঞার পরিবর্তে বলা হয়ে থাকে।
XOR
(()~(~)~^~*)
( ) Define function:
~ ~^ Execute the first argument, with arguments:
(~) "swap arguments"
() identity function
~* Precompose the second argument with {the result}
এবার, আমরা আমাদের দুটি আর্গুমেন্টের মধ্যে কেবল একটির মূল্যায়ন করছি এবং দ্বিতীয় যুক্তিটিতে কী রচনা করব তা নির্ধারণ করতে এটি ব্যবহার করছি। আন্ডারলোড আপনাকে আধ্যাত্মিকতার সাথে দ্রুত এবং আলগা খেলতে দেয়, সুতরাং আমরা দুটি দ্বি-তর্ক দুটি-রিটার্ন ফাংশনগুলির মধ্যে চয়ন করতে প্রথম যুক্তিটি ব্যবহার করছি; যুক্তি অদলবদল যা উভয়কে বিপরীত ক্রমে, এবং পরিচয় ফাংশন যা তাদের উভয়কে একই ক্রমে ফিরিয়ে দেয়।
প্রথম আর্গুমেন্টটি সত্য হলে, আমরা দ্বিতীয় আর্গুমেন্টের একটি সম্পাদিত সংস্করণ তৈরি করি যা এটি চালানোর আগে তার যুক্তিগুলিকে অদলবদল করে, অর্থাত্ "অদলবদল যুক্তি" দিয়ে প্রাক-কম্পোজ করে not
। সুতরাং একটি সত্য প্রথম যুক্তি মানে আমরা not
দ্বিতীয় যুক্তি ফিরে আসি। অন্যদিকে, একটি মিথ্যা প্রথম যুক্তি মানে আমরা পরিচয় ফাংশনটি রচনা করি, অর্থাত্ কিছুই করি না। ফলাফল একটি বাস্তবায়ন হয় xor
।