1) मानक क्या है? आप किस संपत्ति की इच्छा रखते हैं?
सूची सॉर्टिंग? आसान।चलो हास्केल में क्विक्सोर्ट करें:
sort [] = []
sort (x:xs) = sort (filter (< x) xs) ++ [x] ++ sort (filter (>= x) xs)
इस कोड को समझने में बेहद आसान होने का लाभ है। यदि सूची खाली है, तो इसे हल किया गया है। अन्यथा, पहले तत्व एक्स को कॉल करें, एक्स से कम तत्व ढूंढें और उन्हें सॉर्ट करें, एक्स से अधिक तत्व ढूंढें और उनको सॉर्ट करें। फिर क्रमबद्ध एक्स को मध्य में एक्स के साथ संयोजित करें। सी ++ में समझने योग्य दिखने का प्रयास करें।
बेशक, विलय सूचियों को क्रमबद्ध करने के लिए विलयॉर्ट बहुत तेज़ है, लेकिन कोड भी 6 गुना लंबा है।
2) पूरी तरह से कार्यात्मक रहते हुए अनिवार्य शैली को लागू करना बेहद आसान है। अनिवार्य शैली का सार क्रियाओं का अनुक्रम है। मोनैड का उपयोग करके क्रियाओं को शुद्ध सेटिंग में अनुक्रमित किया जाता है। monads का सार बंधन समारोह है:
(Monad m) => (>>=) :: m a -> (a -> m b) -> m b
इस समारोह सी ++ में मौजूद है, और यह ;
कहा जाता है।
हास्केल में गतिविधियों का क्रम, उदाहरण के लिए, thusly लिखा है:
putStrLn "What's your name?" >>=
const (getLine >>= \name -> putStrLn ("Hello, " ++ name))
कुछ वाक्य रचना चीनी इस नज़र अधिक जरूरी बनाने के लिए उपलब्ध है (लेकिन ध्यान दें कि इस ठीक उसी कोड है):
do {
putStrLn "What's your name?";
name <- getLine;
putStrLn ("Hello, " ++ name);
}
आप पूछ रहे हैं कि किसी अन्य में लिखते समय एक शैली का अनुकरण करना कितना मुश्किल है? – ShreevatsaR
यह धारणा है कि एक अनिवार्य भाषा का उपयोग करके एक कार्यात्मक भाषा लागू की जाएगी संदिग्ध है। ओकैमल ओकैमल में लिखा गया है, और हास्केल (जीएचसी) का सबसे लोकप्रिय कार्यान्वयन हास्केल में लिखा गया है। – Chuck
@ श्रीवत्सरा: शायद मुझे फिर से जाना चाहिए, लेकिन मैं यही पूछ रहा हूं। 'प्रोजेक्ट', 'डू' जैसे विशेष संरचनाओं के बिना शुद्ध कार्यात्मक भाषा में कोडिंग करते समय अनिवार्य कार्यक्रम लिखना कितना मुश्किल है ... उदाहरण के लिए, यह एक ज्ञात चाल है कि कार्यात्मक कार्यक्रम बंद करने के उपयोग के साथ 'अनिवार्य' राज्य का अनुकरण कर सकते हैं। मैं यही पूछ रहा था। – Bubba88