मैं इनमें से अधिकांश उत्तरों में कुछ ऐसा देखता हूं जिस पर मुझे कोई आपत्ति होती है, जो एक फ़ंक्शन को एक फ़ंक्शन बनाता है वह यह है कि यह एक मान लौटाता है।
एक फ़ंक्शन किसी भी पुरानी विधि नहीं है जो एक मान लौटाता है। ऐसा नहीं है: एक विधि के लिए एक वास्तविक कार्य होने के लिए इसे एक ही मूल्य हमेशा एक विशिष्ट इनपुट दिया जाना चाहिए। एक विधि का एक उदाहरण जो एक फ़ंक्शन नहीं है random
, अधिकांश भाषाओं में विधि है, क्योंकि हालांकि यह एक मान लौटाता है मान हमेशा समान नहीं होता है।
एक फ़ंक्शन इसलिए नक्शे के लिए अधिक समान है (जैसे जहां x -> x'
एक आयामी फ़ंक्शन के लिए)। यह नियमित तरीकों और कार्यों के बीच एक बहुत महत्वपूर्ण अंतर है क्योंकि वास्तविक कार्यों के साथ काम करते समय समय और जिस क्रम में उनका मूल्यांकन किया जाता है वह कभी भी मायने नहीं रखता है, क्योंकि गैर कार्यों के साथ हमेशा ऐसा नहीं होता है।
यहां एक विधि का एक और उदाहरण है जो एक फ़ंक्शन नहीं है, लेकिन अन्यथा अभी भी एक मान लौटाएगा।
// The following is pseudo code:
g(x) = {
if (morning()) {
g = 2 * x;
}
else {
g = x;
}
return g;
}
मैं आगे इस धारणा पर आपत्ति करता हूं कि प्रक्रियाएं मान नहीं लौटाती हैं। एक प्रक्रिया किसी फ़ंक्शन या विधि के बारे में बात करने का एक विशिष्ट तरीका है। तो इसका मतलब यह है कि यदि अंतर्निहित प्रक्रिया जो आपकी प्रक्रिया को परिभाषित करती है या लागू करती है तो एक मान लौटाती है, अनुमान करें कि वह प्रक्रिया क्या मान लौटाती है। उदाहरण के लिए SICP से निम्नलिखित स्निपेट लें :
// We can immediately translate this definition into a recursive procedure
// for computing Fibonacci numbers:
(define (fib n)
(cond ((= n 0) 0)
((= n 1) 1)
(else (+ (fib (- n 1))
(fib (- n 2))))))
क्या आपने हाल ही में पुनरावर्ती प्रक्रियाओं के बारे में सुना है? वे एक पुनरावर्ती कार्य (एक वास्तविक कार्य) के बारे में बात कर रहे हैं और यह एक मान लौटा रहा है और वे "प्रक्रिया" शब्द का उपयोग कर रहे हैं। तो क्या अंतर है, फिर?
किसी फ़ंक्शन के बारे में सोचने का एक और तरीका (ऊपर उल्लिखित अर्थ के अलावा) अंक 1 जैसे आदर्श का एक सार प्रतिनिधित्व है। एक प्रक्रिया उस चीज़ का वास्तविक कार्यान्वयन है। मुझे व्यक्तिगत रूप से लगता है कि वे विनिमेय हैं।
(ध्यान दें, यदि आप उस अध्याय को उस लिंक से पढ़ते हैं जो मैं आपको प्रदान करता हूं, तो आप पा सकते हैं कि समझ में आने वाली कठिन अवधारणा किसी फ़ंक्शन और प्रक्रिया के बीच का अंतर नहीं है, बल्कि एक प्रक्रिया और एक प्रक्रिया है। क्या आप जानते हैं कि एक पुनरावर्ती प्रक्रिया एक हो सकती है। पुनरावृति कार्य?)
प्रक्रियाओं के लिए एक एनालॉग व्यंजनों हैं। उदाहरण के लिए; मान लें कि आपके पास एक मशीन है जिसे make-pies
यह मशीन अंदर ले जाती है (fruit, milk, flower, eggs, sugar, heat)
और यह मशीन वापस आ जाती है pie
।
इस मशीन का एक प्रतिनिधित्व की तरह लग सकता है
make-pies (fruit, milk, flower, eggs, sugar, heat) = {
return (heat (add fruit (mix eggs flower milk)))
}
बेशक यह एक पाई बनाने का एकमात्र तरीका नहीं है।
इस मामले में हम देख सकते हैं कि:
A function is to a machine
as a procedure is to a recipe
as attributes are to ingredients
as output is to product
यह सादृश्य ठीक है, लेकिन यह तब टूट जाता है जब आप इस बात को ध्यान में रखते हैं कि जब आप कंप्यूटर प्रोग्राम के साथ काम कर रहे हैं तो सब कुछ एक अमूर्त है। तो एक मशीन के लिए एक नुस्खा के मामले में हम दो चीजों की तुलना कर रहे हैं जो स्वयं अमूर्त हैं; दो चीजें जो एक ही चीज हो सकती हैं। और मैं मानता हूं कि वे (सभी इरादों और उद्देश्यों के लिए) एक ही चीज हैं।