7

फोर्टन मौलिक subroutines इरादे (inout) और इरादा (बाहर) तर्क करने की अनुमति देता है, लेकिन मौलिक कार्यों केवल मंशा (इन) की अनुमति है।फोरट्रान मौलिक कार्य बनाम मूलभूत subroutines

वह क्यों है? क्या यह सिर्फ एक स्टाइलिस्ट सम्मेलन है, या क्या कार्यों को आमंत्रित करने और सबराउटिन को कॉल करने के बारे में कुछ सामान्य रूप से अलग है?

दूसरे शब्दों में,

Elemental Integer Function FOO(i) 
    Integer, intent(in) :: i 
    ... 
    FOO=something 
End Function 

और

Elemental Subroutine FOO(i, v) 
    Integer, intent(in) :: i 
    Integer, intent(out) :: v 
    ... 
    v=something 
End Subroutine 

— FOO के इन कार्यान्वयन समतुल्य रूप से कुशल हैं?

+0

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

+0

मुझे लगता है कि अगर एक सबराउटिन केवल अपने तर्कों को संशोधित करता है और वैश्विक चर को स्पर्श नहीं करता है, तो ऐसे सबराउटिन को कुशलतापूर्वक संकलित करना मुश्किल नहीं है। इस तरह की कार्यक्षमता समझ में आता है। उदाहरण के लिए, एक यादृच्छिक संख्या जनरेटर को यादृच्छिक संख्या अनुक्रम की स्थिति को संशोधित करना चाहिए (पूर्णांक की सरणी द्वारा वर्णित) और एक यादृच्छिक संख्या लौटाएं। तो यह एक इरादा (inout) और एक इरादा (बाहर) तर्क होना चाहिए। अनुमोदित, उपयोगकर्ता ऐसे सबराउटिन में साझा चर को पारित करके गड़बड़ कर सकता है। लेकिन फिर फिर, कोई प्रोग्रामिंग प्रतिमान मूर्ख-प्रमाण नहीं है। – drlemon

उत्तर

6

कम से कम एक तर्क intent(out) या intent(inout) के बिना एक मौलिक सबराउटिन होने का कोई मतलब नहीं है, क्योंकि आपको किसी भी तरह से परिणाम पास करना होगा। एक फ़ंक्शन में इसका रिटर्न वैल्यू होता है, एक सबराउटिन को इसके तर्कों का उपयोग करना चाहिए। फोरट्रान 2008 में AFAIK मौलिक प्रक्रियाओं को शुद्ध नहीं होना चाहिए, लेकिन इसके दुष्प्रभावों के माध्यम से केवल उपयोगी मौलिक सबराउटिन की कल्पना करना मुश्किल है।

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