2009-05-05 13 views
6

मुझे एक समस्या है, जो मुझे लगता है कि प्रोग्रामिंग की एक कार्यात्मक शैली के माध्यम से सबसे अच्छा हल किया जाना है।कार्यात्मक प्रोग्रामिंग - मानक प्रतीकों, आरेख, आदि

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

क्या कार्यात्मक कार्यक्रमों के डिजाइन में उपयोग किए गए आरेखों या गणितीय प्रतीकों का कोई मानकीकृत सेट है, या ऐसे प्रोग्राम हैं जो छोटे कार्यात्मक-छद्म कोड में सर्वोत्तम रूप से डिज़ाइन किए गए हैं (यह देखते हुए कि कार्य अनिवार्य समकक्षों से बहुत कम होंगे)।

धन्यवाद, माइक

उत्तर

7

कार्यात्मक प्रोग्रामिंग के लिए एक गुप्त चाल नहीं है।

  1. यह काफी हद तक स्टेटलेस है, इसलिए परंपरागत अनिवार्य आरेख कोई फर्क नहीं पड़ता।

  2. अधिकांश सामान्य, बगीचे-विविध गणित नोटेशन भी स्टेटलेस है।

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

आरेख आवश्यक नहीं हैं क्योंकि कार्यात्मक प्रोग्रामिंग प्रक्रियात्मक प्रोग्रामिंग से कुछ सरल है। यह परंपरागत गणितीय नोटेशन की तरह है। यह दिखाने के लिए गणितीय तकनीकों का प्रयोग करें कि आपके विभिन्न कार्य सही चीजें करते हैं।

-1

मैं कार्यात्मक प्रोग्रामिंग के बारे में ज्यादा पता नहीं है, लेकिन यहां दो बातें मैं

  • λ (लैम्ब्डा) में चलाने की है अक्सर एक समारोह
  • च ο छ लिए किया जाता है निरूपित किया जाता है कर रहे हैं फंक्शन संरचना
+0

तीर अंकन, अर्थात्: ('एक -> एम' ख) -> एम 'एक -> एम 'बी – nlucaroni

+1

वाह, जो इस सवाल को इतनी मेहनत से चूक गया। ऊ – Profpatsch

4

कार्यात्मक प्रोग्रामर समीकरण लेखन में अधिक हैं और फिर चित्र लिखते हैं। खेल संतुलन संबंधी तर्क कहा जाता है और यह ज्यादातर के बराबर होती है के लिए

  • बीजीय कानूनों को लागू करने

    • स्थानापन्न के बराबर होती है शामिल है

    • प्रेरण

    विचार से कभी सबूत यह है कि आप वास्तव में सरल कोड लिखते हैं जो "स्पष्ट रूप से सही" है, फिर आप इसे समेकित तर्क में बदलने के लिए जो क्लीनर है और/या बेहतर प्रदर्शन करेगा। इस कला का मास्टर रिचर्ड बर्ड नामक एक ऑक्सफोर्ड प्रोफेसर है।

    उदाहरण के लिए, अगर मैं योजना अभिव्यक्ति को आसान बनाने के

    (append (list x) l) 
    

    चाहते मैं subsitute जाएगा पागल जैसे बराबर के लिए बराबर होती है। list की परिभाषा का उपयोग करते हुए मैं

    (append (cons x '()) l) 
    

    संलग्न के शरीर Subsituting मिल रहा

    (if (null? (cons x '())) 
        l 
        (cons (car (cons x '())) (append (cdr (cons x '())) l))) 
    

    अब मैं इन बीजीय कानून है है:

    (null? (cons a b)) == #f 
    (car (cons a b)) == a 
    (cdr (cons a b)) == b 
    

    और प्रतिस्थापन के लिए बराबर होती है मैं

    पाने के बराबर होती है
    (if #f 
        l 
        (cons x (append '() l)) 
    

    एक और कानून, (if #f e1 e2) == e2 के साथ, मैं

    (cons x (append '() l)) 
    

    मिलता और अगर मैं फिर से संलग्न की परिभाषा व्यय मैं

    (cons x l) 
    

    जो मैं साबित कर दिया है

    (append (list x) l) 
    
  • 2
      के बराबर है
    • एनीमेशन का उपयोग करके लैम्ब्डा कैलकुस समझाते हुए यह बहुत अच्छा लेख है: To Dissect a Mockingbird: A Graphical Notation for the Lambda Calculus with Animated Reduction
    • यह एक बहुत पिछले करने के लिए समान है, लेकिन एक वास्तविक क्रियान्वयन है: प्रकार के लिए Lambda Animator
    संबंधित मुद्दे