হাস্কেল হ্যাকার হওয়ার কারণে আমি পয়েন্টফ্রি চেয়ে বেশি পয়েন্টফ্রি নোটকেই বেশি পছন্দ করি। দুর্ভাগ্যক্রমে কিছু লোক পয়েন্টফ্রি নিবন্ধটি পড়া কঠিন বলে মনে হয় এবং আমি যখন বিন্দুতে লিখি তখন সঠিক বন্ধনীগুলির সঠিক সংখ্যা পাওয়া আমার পক্ষে কঠিন find আমাকে পয়েন্টফ্রি তে লিখিত কোডটি পয়েন্টফুলিটি নোটেশনে রূপান্তর করতে সহায়তা করুন!
সম্পর্কিত
বিন্দু বিন্যাসে আমরা একটি ফাংশনের আউটপুটটিকে অন্যটিতে ফিড করতে পয়েন্টগুলি (হ্যাঁ, সত্যই) ব্যবহার করি। বলুন, আপনার যদি এমন কোনও ফাংশন থাকে succ
যা একটি সংখ্যা নেয় এবং এতে 1 যোগ করে এবং আপনি এমন একটি ফাংশন তৈরি করতে চেয়েছিলেন যা এটি করার পরিবর্তে একটি সংখ্যায় 3 যোগ করে:
\x -> succ(succ(succ(x)))
আপনি এটি করতে পারে:
succ.succ.succ
পয়েন্টফ্রি শুধুমাত্র সেই ফাংশনগুলির সাথে কাজ করে যা একটি প্যারামিটার নেয় তবে (যাইহোক এই চ্যালেঞ্জে), সুতরাং যদি আমাদের ফাংশনটি না হয়ে succ
বরং add
2 নম্বর নেয় এবং তাদের একসাথে যুক্ত করে থাকে, তবে কেবলমাত্র একটি মাত্র বাকি না থাকলে আমাদের এটিকে যুক্তিগুলি খাওয়াতে হবে:
pointful: \x -> add 1(add 1(add 1 x))
pointfree: add 1 . add 1 . add 1
শেষ অবধি, ফাংশনগুলি অন্যান্য কার্যাদি আর্গুমেন্ট হিসাবে গ্রহণ করতে পারে:
Pointfree: map (f a . f b) . id
Pointful: \x -> map (\x -> f a (f b x)) (id x)
Javascript equivalent: x => map (x => f(a,f(b,x)), id(x))
ইনপুট এবং প্রত্যাশিত আউটপুট
f . f . f
\x -> f (f (f x))
f a . f b . f c
\x -> f a (f b (f c x))
f (f a . f b) . f c
\x -> f (\x -> f a (f b x)) (f c x)
a b c . d e . f g h i . j k l . m
\x -> a b c (d e (f g h i (j k l (m x))))
a.b(c.d)e.f g(h)(i j.k).l(m(n.o).p)
\x->a(b(\y->c(d y))e(f g h(\z->i j(k z))(l(\q->m(\w->n(o w))(p q))x)))
বিধি
- আপনার আউটপুটে যতক্ষণ না ভারসাম্য বজায় থাকে তত প্রয়োজনের চেয়ে বেশি স্পেস বা বন্ধনী থাকতে পারে
- আপনার যে ভেরিয়েবলের নাম তৈরি
\x
হয়েছে সেটি কোডের অন্য কোনও জায়গায় ইতিমধ্যে ব্যবহার করা হয়নি তা নিশ্চিত করার দরকার নেই - কোনও ক্রিয়াকলাপ বা সম্পূর্ণ প্রোগ্রাম তৈরি করা আপনার পছন্দ
- এই
codegolf
, বাইট জিতে সংক্ষিপ্ত কোড!
আপনি ভোঁতা কাজে লাগতে পারেন, এটি দুটি স্বরলিপিগুলির মধ্যে রূপান্তর করে (তবে কোডটি যখন সম্ভব তখন ফ্যাক্টরিওস): https://blunt.herokuapp.com
(+).(*3)
একই হিসাবে\x y->3*x+y
(.).(.)
যা রূপান্তরিত হয়\i b c f -> i (b c f)
.
একটি সঙ্গে (
, শুরুতে যোগ একটি \x
আর এর সাথে যোগ x
এবং অনেক হিসাবে )
হিসাবে প্রয়োজন হয়? নাকি এর চেয়ে জটিল?
\ d->f(\k->f(f d k))
, তবে আপনি ধরে নিতে পারেন যে সমস্ত বিন্দু এই চ্যালেঞ্জের জন্য দুটি যুক্তি সরবরাহ করেছে