अपने K नोड्स को जानें
कार्यात्मक भाषाओं में सबसे मजबूत निर्माण (गोल्फ के लिए) हैं let ... in ...
।
निश्चित रूप से स्वच्छ, इस है, और कुछ बेहतर - #
।
एक नोड क्या है?
क्लीन #
और सर्वव्यापी |
(पैटर्न गार्ड) दोनों को 'नोड एक्सप्रेशन' के रूप में जाना जाता है।
विशेष रूप से, वे आपको अनिवार्य रूप से स्वच्छ में ईश का कार्यक्रम करने की अनुमति देते हैं (जो वास्तव में यहाँ अच्छा है!)।
#
(जाने-से पहले):
ये दोनों एक स्ट्रिंग के रूप में दिए गए पूर्णांक के मूल्य की गणना करते हैं, इसके वर्णों के योग से गुणा करते हैं
f s=let i=toInt s;n=sum[toInt c\\c<-:s]in n*i
f s#i=toInt s
#s=sum[toInt c\\c<-:s]
=s*i
ध्यान दें कि किस प्रकार का संस्करण #
छोटा है, और हम कैसे फिर से परिभाषित कर सकते हैं s
। यह उपयोगी है अगर हमें उस मूल्य की आवश्यकता नहीं है जो एक चर है जब हम इसे प्राप्त करते हैं, इसलिए हम केवल नाम का फिर से उपयोग कर सकते हैं। ( let
जब आप ऐसा करते हैं तो मुद्दों में भाग सकते हैं)
लेकिन let
जब आपको किसी चीज़ की ज़रूरत होती है तो इसका उपयोग करना आसान होता हैflip f = let g x y = f y x in g
|
(पैटर्न गार्ड):
क्लीन के पैटर्न गार्ड को कई अन्य कार्यात्मक भाषाओं में उन लोगों की तरह इस्तेमाल किया जा सकता है - हालांकि इसे एक अनिवार्यता की तरह भी इस्तेमाल किया जा सकता है if ... else ...
। और टर्नरी अभिव्यक्ति का एक छोटा संस्करण।
उदाहरण के लिए, ये सभी पूर्णांक का संकेत देते हैं:
s n|n<>0|n>0=1= -1
=0
s n=if(n<>0)if(n>0)1(-1)0
s n|n>0=1|n<0= -1=0
बेशक, अंतिम एक जो गार्ड का अधिक परंपरागत रूप से उपयोग करता है वह सबसे छोटा है, लेकिन पहले वाला दिखाता है कि आप उन्हें घोंसला दे सकते हैं (लेकिन लेआउट नियम में केवल दो बिना शर्त वापसी खंड एक ही पंक्ति में दिखाई दे सकते हैं), और दूसरा दिखाता है कि क्या पहले एक तार्किक रूप से करता है।
एक नोट:
आप इन अभिव्यक्तियों का उपयोग मूल रूप से कहीं भी कर सकते हैं। Lambdas में, case ... of
, let ... in
, आदि
import StdEnv
+a and b
की तुलना में छोटे (21 बाइट्स)%[a:r]|a= %r=a;%_=True
, (22 बाइट्स) हालांकि? या यहimport StdEnv
+a=True and b=True
(31 बाइट्स) होगा, इस मामले में यह वास्तव में निश्चित रूप से छोटा है? (मैंने क्लीन,