सबसे छोटा तरीका क्या है हम फ़ंक्शन को व्यक्त कर सकते हैं
f(a,b)(c,d)=(a+c,b+d)
बिंदु-रहित संकेतन में?
pointfree.io हमें देता है
uncurry (flip flip snd . (ap .) . flip flip fst . ((.) .) . (. (+)) . flip . (((.) . (,)) .) . (+))
जिसके साथ थोड़े से काम को छोटा किया जा सकता है
uncurry$(`flip`snd).((<*>).).(`flip`fst).((.).).(.(+)).flip.(((.).(,)).).(+)
76 बाइट्स के लिए। लेकिन इस तरह के एक सरल कार्य के लिए यह अभी भी बहुत लंबा और जटिल लगता है । वहाँ किसी भी तरह से हम एक छोटे बिंदु मुक्त समारोह के रूप में जोड़ जोड़ व्यक्त कर सकते हैं?
पॉइंट-फ़्री से मेरा क्या मतलब है, यह स्पष्ट करने के लिए, फ़ंक्शन के एक पॉइंट-फ्री डिक्लेरेशन में मौजूदा फ़ंक्शंस और ऑपरेटर्स को शामिल करना और उन्हें एक-दूसरे को इस तरह से लागू करना शामिल है कि वांछित फ़ंक्शन बनाया जाता है। बैकटिक, कोष्ठक और शाब्दिक मूल्यों ( []
, 0
, [1..3]
, आदि) की अनुमति है, लेकिन जैसे कीवर्ड where
और let
नहीं कर रहे हैं। इसका मतलब है की:
आप किसी भी चर / कार्यों को असाइन नहीं कर सकते हैं
आप लैम्ब्डा का उपयोग नहीं कर सकते हैं
आप आयात नहीं कर सकते
(+)***(+)
।
(+)<$>([1],2)<*>([3],4)
देता है ([1,3],6)
।