2013-02-18 37 views
6

योजना में जो एक कार्यात्मक प्रोग्रामिंग भाषा है, वहां कोई असाइनमेंट स्टेटमेंट नहीं है। लेकिन एक let बयानयोजना बयान

(let ((x 2)) 
    (+ x 3)) 

आप x करने के लिए 2 बताए जाते हैं, तो क्यों इस सिद्धांत है कि वहाँ कार्यात्मक प्रोग्रामिंग में कोई काम बयानों का उल्लंघन नहीं करता?

उत्तर

11

कथन "योजना जो एक कार्यात्मक प्रोग्रामिंग भाषा है" गलत है। योजना में, एक कार्यात्मक-प्रोग्रामिंग शैली को प्रोत्साहित किया जाता है, लेकिन मजबूर नहीं किया जाता है। वास्तव में, यदि आप किसी भी चर के मूल्य को संशोधित करने के लिए set! (एक काम बयान!) का उपयोग कर सकते हैं:

(define x 10) 
(set! x (+ x 3)) 
x 
=> 13 
सवाल का let बयान के बारे में

, याद रखें कि एक इस तरह के रूप में एक अभिव्यक्ति:

(let ((x 10)) 
    (+ x 3)) 
=> 13 

... यह सिर्फ वाक्यात्मक चीनी है, और हुड के नीचे इसे इस तरह लागू हो जाता है:

((lambda (x) 
    (+ x 3)) 
10) 
=> 13 

सूचना है कि एक,210, के वैरिएबल पर एक बार single assignments करता है तो यह किसी भी विशुद्ध रूप से कार्यात्मक प्रोग्रामिंग सिद्धांत का उल्लंघन नहीं करता से प्रति, निम्नलिखित एक let अभिव्यक्ति की पुष्टि की जा सकती है:

एक अभिव्यक्ति का मूल्यांकन नहीं है एक पक्ष प्रभाव अगर यह मशीन का एक नमूदार राज्य में परिवर्तन नहीं होता है, और, एक ही इनपुट के लिए

इसके अलावा एक ही मान पैदा करता विकिपीडिया से उद्धृत:

अशुद्ध कार्यात्मक भाषाएं एकल असाइनमेंट के साथ-साथ सच्ची असाइनमेंट प्रदान करती हैं (हालांकि वास्तविक असाइनमेंट आम तौर पर अनिवार्य प्रोग्रामिंग भाषाओं की तुलना में कम आवृत्ति के साथ प्रयोग किया जाता है)। उदाहरण के लिए, इस योजना में, दोनों ही काम (let के साथ) और सच्चा काम (set! के साथ) के लिए सभी चर पर इस्तेमाल किया जा सकता है, और विशेष पुरातन सूचियों, वैक्टर, तार अंदर विनाशकारी अद्यतन के लिए प्रदान की जाती हैं, आदि

+1

एक कार्यात्मक प्रोग्रामिंग भाषा प्रोत्साहित करती है और सुविधाओं की पेशकश करती है लेकिन यह आवश्यक रूप से कार्यात्मक प्रोग्रामिंग को लागू नहीं करती है। – ThePiercingPrince

1

http://en.wikipedia.org/wiki/Assignment_(computer_science)#Single_assignment

असल में, यह एक एकल काम है कि स्वीकार्य है। दुष्प्रभावों के कारण अन्य असाइनमेंट "अनुमति" नहीं है।

संपादित करें: उद्धरणों में अनुमत क्योंकि, जैसा कि ऑस्कर ने कहा था, यह अनिवार्य नहीं है लेकिन सुझाव दिया गया है।