F #

2010-10-06 15 views
15

का उपयोग कर शुद्ध कार्यात्मक 0 #जैसे शुद्ध कार्यात्मक भाषा की तरह व्यवहार करने के लिए F # को मजबूर करना संभव है? शायद कुछ संकलक निर्देशों का उपयोग कर?F #

पुनश्च: के बाद से मैं एक C/C++ पृष्ठभूमि से आते हैं, मैं माफी चाहता, हास्केल सीखने के बिना कार्यात्मक प्रोग्रामिंग जानने के लिए अपने आप को मजबूर करने के लिए :)

+7

क्यों नस्केल सीखें नहीं? इसका वाक्यविन्यास एफ # के लगभग एक उप-समूह है, और हास्केल एफ # में ज्ञान के साथ केक का एक टुकड़ा होगा। संभावित दुष्प्रभाव: आप एफ # से नफरत करेंगे। – luqui

उत्तर

11

आप इस व्यवहार को एफ # में मजबूर नहीं कर सकते, लेकिन ब्रायन ने कहा कि अनुशासन आपका सबसे अच्छा दोस्त है। जैसे mutable, for या while लूप, ref कीवर्ड आदि का उपयोग न करें। पूरी तरह से अपरिवर्तनीय डेटा संरचनाओं (भेदभाव संघ, सूची, टुपल, मानचित्र इत्यादि) के साथ भी चिपके रहें। यदि आपको किसी बिंदु पर आईओ करने की आवश्यकता है, तो अपने प्रोग्राम को आर्किटेक्ट करें ताकि वे आपके विशुद्ध रूप से कार्यात्मक कोड से अलग हो जाएं।

कार्यात्मक प्रोग्रामिंग को न भूलें, साइड इफेक्ट्स को सीमित और अलग करने के बारे में है।

+4

"कार्यात्मक प्रोग्रामिंग को मत भूलना साइड इफेक्ट्स को सीमित और अलग करने के बारे में है।" - या उनका प्रतिनिधित्व करते हैं, इसलिए वे अब "पक्ष" पर नहीं हैं :) – mokus

+1

"कार्यात्मक प्रोग्रामिंग को न भूलें साइड इफेक्ट्स को सीमित और अलग करने के बारे में सब कुछ है" - मेरे लिए कम से कम, यह भी परिभाषित करने में सक्षम होने के बारे में है सही ढंग से ऐसा है कि अमान्य राज्य अप्रत्याशित हो जाते हैं। आप इसे अन्य भाषाओं में कर सकते हैं (जैसे सी ++) लेकिन एफ # और अन्य कार्यात्मक भाषाओं की प्रकार प्रणाली यह आसान बनाती है। – sashang

10

नहीं चाहते हैं। आपको सिर्फ अनुशासन का उपयोग करना होगा।

+0

क्या आप इसे भी कर सकते हैं?आपको सामान्य रूप से ऐसा करने वाले सभी चीज़ों के लिए मोनाड बनाना होगा जिनके दुष्प्रभाव होते हैं (जैसे I/O)। – Gabe

+1

@Gabe: हास्केल के मोनैड सिस्टम के अलावा आईओ के लिए अन्य मॉडल भी हैं, हालांकि यह लचीलापन और सादगी (आश्चर्यजनक रूप से पर्याप्त) के बीच सबसे अच्छा व्यापार है जो मैंने सुना है। यदि आप विषय पर कुछ गहराई से तर्क पढ़ना चाहते हैं तो आपको साइमन पेटन जोन्स के "Awkward Squad" पेपर को पढ़ने में रुचि हो सकती है। – Chuck

+0

चक: क्या आप कह रहे हैं कि एफ # का एक पूर्ण रूप से कार्यात्मक I/O आदिम है जो एक मोनड नहीं है? या जो भी आप I/O करने के लिए लागू करेंगे, वह एक मोनड नहीं होना चाहिए? – Gabe

0

नहीं वर्तमान में F # कंपाइलर इस जांच को नहीं कर सकता है।

क्यों न केवल कार्यात्मक प्रोग्रामिंग सीखने के लिए कुछ एफ # प्रोग्राम लिखना शुरू करें? मैं कुछ लोगों को जानता हूं जिन्होंने पहले एमएल/ओकैम/एफ # सीखा और फिर हास्केल चले गए।

तब आपको शुद्धता की बेहतर समझ होगी। (यदि आपने वास्तव में किसी भी कार्यात्मक प्रोग्रामिंग भाषा को छुआ नहीं है, तो शुद्ध कार्यात्मक की आपकी समझ सतही हो सकती है।)

4

यदि आप मेरे जैसे कुछ हैं, तो शायद आप 'अच्छी चीजें' से बचेंगे यदि आप नहीं करते हैं अपने आप को F # के बजाय हास्केल का उपयोग करने के लिए मजबूर करें और जैसा कि आप कर सकते हैं हास्केल को idiomatically के रूप में उपयोग करें। ऑब्जेक्ट्स के बजाए बीजगणित डेटा प्रकारों का उपयोग करना, आलस्य से प्यार करना, मोनैड को गले लगाने और सीखना, हास्केल का मुख्य भाग और अधिक कार्यात्मक प्रोग्रामिंग के तर्कसंगत बिंदुओं (मेरी राय में) के कुछ अधिक हैं।

एफ # कई तरीकों से सीखने की अवस्था के रूप में नहीं है, लेकिन आप ध्वनि की तरह इसे सीख रहे हैं, तो खुद को चुनौती क्यों न दें? मैं प्रमाणित कर सकता हूं कि Haskell का उपयोग करने के बाद F # पर जाने से आप सामान्य रूप से F # सामान्य पर किसी भी तरह का उपयोग करने के लिए बेहतर अनुभव कर सकते हैं।

विचार के लिए भोजन।

2

हास्केल के विशुद्ध रूप से कार्यात्मक पहलू भाषा के लिए मौलिक हैं। आप इसे केवल भाषाओं के बीच प्रत्यारोपित नहीं कर सकते हैं। यह प्रमुख डिजाइन निर्णयों की ओर जाता है - उदाहरण के लिए, हास्केल की पूरी तरह कार्यात्मक प्रकृति ने आईओ मोनैड का आविष्कार किया। एफ # में राज्यव्यापी गणना के लिए ऐसा "एस्केप-वाल्व" नहीं है।

इसके अलावा, एक भाषा कार्यात्मक प्रोग्रामिंग का समर्थन करता है, लेकिन पूरी तरह से यह लागू नहीं करता है पराक्रम वास्तव में शिक्षाप्रद हो कि में कार्यक्रम सीखने। कई लोग हास्केल के व्यक्तिगत डिजाइन निर्णयों (जैसे आईओ मोनैड, फिर से बड़े उदाहरण को हिट करने के लिए) और भ्रमित प्रोग्रामिंग सामान्य रूप से कैसे काम करते हैं, के बीच भ्रमित हो जाते हैं।

संक्षेप में: नहीं, आप यह नहीं कर सकते। लेकिन आप जो भी कर सकते हैं वह बहुत सावधानी से देखता है और आप जो कुछ भी करते हैं, उसमें सवाल उठाना शामिल है जिसमें राज्य को बनाए रखना और अनुक्रमित करना शामिल है ताकि यह सुनिश्चित किया जा सके कि आपके पास गायब होने वाली अधिक शुद्ध अमूर्तता नहीं है।

संबंधित मुद्दे