फर्स्ट क्लास फंक्शन और हाई ऑर्डर फंक्शन के बीच कोई अंतर


129

मैं सोच रहा हूँ कि क्या / प्रथम श्रेणी के समारोह और उच्च आदेश समारोह के बीच क्या अंतर है ।

मैं उन दो विकी पृष्ठों के माध्यम से पढ़ता हूं और वे समान दिखते हैं। यदि वे उसी के बारे में बात कर रहे हैं, तो दो शब्दावली की आवश्यकता क्यों है?

गूगल पर कोशिश की लेकिन कोई उपयोगी चीज नहीं मिली।

जवाबों:


154

इसमे अंतर है। जब आप कहते हैं कि किसी भाषा में प्रथम श्रेणी के कार्य होते हैं, तो इसका मतलब है कि भाषा मानों के रूप में कार्य करती है - कि आप किसी फ़ंक्शन को एक चर में असाइन कर सकते हैं, इसे पास कर सकते हैं आदि। उच्च-कार्य फ़ंक्शन ऐसे कार्य हैं जो अन्य कार्यों पर काम करते हैं, अर्थ वे तर्क के रूप में एक या एक से अधिक कार्य लेते हैं और एक फ़ंक्शन भी वापस कर सकते हैं।

"उच्च-क्रम" की अवधारणा को सामान्य रूप से गणितीय अर्थों में कार्यों की तरह लागू किया जा सकता है। "प्रथम श्रेणी" की अवधारणा को केवल प्रोग्रामिंग भाषाओं में कार्य करना है। यह एक समारोह का उल्लेख करते समय शायद ही कभी इस्तेमाल किया जाता है, जैसे कि "प्रथम श्रेणी का एक समारोह"। यह कहना अधिक आम है कि "किसी भाषा में प्रथम श्रेणी का समर्थन नहीं है"।

दो चीजें निकटता से संबंधित हैं, क्योंकि प्रथम श्रेणी के कार्यों के साथ एक भाषा की कल्पना करना कठिन है जो उच्च-क्रम के कार्यों का समर्थन नहीं करेगा, और इसके साथ-साथ उच्च-श्रेणी के कार्यों के साथ एक भाषा भी होगी लेकिन प्रथम श्रेणी के फ़ंक्शन समर्थन के बिना।


2
मुझे लगता है कि एक बात मुझे आसानी से भ्रमित कर देती है कि वे निकटता से संबंधित हैं।
साइमन

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

बिल्कुल बेन। मैं सोच रहा था कि वे दोनों कार्य के लिए एक संपत्ति हैं इसलिए मैं भ्रमित था। आपकी टिप्पणियों के लिए धन्यवाद।
साइमन

इसके अलावा, यह ध्यान रखना अच्छा है कि "प्रथम श्रेणी के कार्य" बंद समर्थन के समान नहीं हैं। उदाहरण के लिए, C फ़ंक्शन पॉइंटर्स के माध्यम से "प्रथम श्रेणी के कार्यों" का समर्थन करता है। हालांकि, सी नेस्टेड फ़ंक्शन की किसी भी धारणा का समर्थन नहीं करता है, और इसलिए, बंद का समर्थन नहीं करता है।
टेक-टिकिक्स

1
@ टैक-टिक्स परिभाषाएँ निश्चित रूप से व्यक्तिपरक और बहस के लिए खुली हैं, लेकिन मैं व्यक्तिगत रूप से यह सोचना पसंद करता हूं कि सी केवल उच्च आदेश कार्यों (फ़ंक्शन पॉइंटर्स के माध्यम से) का समर्थन करता है। हालाँकि, फ़र्स्ट-क्लास फ़ंक्शंस समर्थित नहीं हैं, क्योंकि फ़ंक्शंस अन्य मान प्रकारों से हीन हैं, intया charइस अर्थ में कि उन्हें जहाँ भी आप चाहते हैं, एक फ़ंक्शन बॉडी द्वारा स्पष्ट रूप से परिभाषित नहीं किया जा सकता है ।
wlnirvana

67

प्रथम श्रेणी के कार्य वे कार्य हैं जिन्हें एक वस्तु की तरह माना जाता है (या एक चर के लिए उपलब्ध है)।

उच्चतर ऑर्डर फ़ंक्शन ऐसे फ़ंक्शंस हैं जो पैरामीटर के रूप में कम से कम एक प्रथम श्रेणी फ़ंक्शन लेते हैं, या कम से कम एक प्रथम श्रेणी फ़ंक्शन को वापस करते हैं।


20

वे अलग हैं।

प्रथम श्रेणी के कार्य

एक भाषा में मान जो समान रूप से पूरे संभाले जाते हैं उन्हें "प्रथम श्रेणी" कहा जाता है। उन्हें डेटा संरचनाओं में संग्रहीत किया जा सकता है, तर्कों के रूप में पारित किया जा सकता है, या नियंत्रण संरचनाओं में उपयोग किया जा सकता है।

वे भाषाएँ जो फ़ंक्शन प्रकारों के साथ मानों का समर्थन करती हैं, और उन्हें गैर-फ़ंक्शन मानों के समान मानती हैं, उन्हें "प्रथम श्रेणी के कार्य" कहा जा सकता है।

उच्चतर कार्य

प्रथम श्रेणी के कार्यों के परिणामों में से एक यह है कि आप किसी फ़ंक्शन को किसी अन्य फ़ंक्शन के तर्क के रूप में पास करने में सक्षम होना चाहिए। बाद का कार्य अब "उच्च क्रम" है। यह एक फ़ंक्शन है जो फ़ंक्शन को तर्क के रूप में लेता है।

विहित उदाहरण "मानचित्र" है

map :: (a -> b) -> [a] -> [b]
map f []     = []
map f (x:xs) = f x : map f xs

यही है, यह एक फ़ंक्शन और एक सरणी लेता है, और प्रत्येक तत्व पर लागू फ़ंक्शन के साथ एक नया सरणी देता है।

कार्यात्मक भाषाएं - ऐसी भाषाएं जहां फ़ंक्शन निर्माण कार्यक्रमों के प्राथमिक साधन हैं - सभी में प्रथम श्रेणी के कार्य हैं। अधिकांश में उच्चतर कार्य कार्य भी होते हैं (एक्सेल जैसी भाषाएं होने का बहुत ही दुर्लभ अपवाद, जिसे कार्यात्मक कहा जा सकता है, लेकिन उच्चतर क्रम नहीं)।


1
धन्यवाद डॉन। यह व्यापक है। और मुझे लगता है कि चरण "परिणामों में से एक" उन दोनों के बीच एक प्रकार का संबंध दर्शाता है।
साइमन

10

पिछले उत्तरों के अलावा, ध्यान दें कि प्रथम श्रेणी के कार्यों वाली भाषा स्वचालित रूप से उच्च-क्रम वाले कार्यों की अभिव्यक्ति को सक्षम करती है (क्योंकि आप किसी भी अन्य मान की तरह कार्यों को पास कर सकते हैं)।

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

तो प्रथम श्रेणी के कार्यों की उपस्थिति (भाषा की विशेषता के रूप में) का अर्थ है उच्च-क्रम वाले कार्यों की उपस्थिति, लेकिन दूसरे तरीके से नहीं।


क्या आप कृपया एक उदाहरण दे सकते हैं जहां एक उच्च क्रम फ़ंक्शन एक प्रथम श्रेणी फ़ंक्शन नहीं है। (मुझे लगा कि दोनों एक ही हैं।)
१५

@ फिर, मेरे पास ऐसी भाषा का ठोस उदाहरण नहीं है जो इस तरह के कार्यों के लिए इस तरह की डिज़ाइन पसंद करेगी। लेकिन ऐसा ही कुछ मामला है जैसे C ++ में टेम्पलेट के साथ उदाहरण: टेम्पलेट उच्च-क्रम (आप "टेम्पलेट टेम्पलेट पैरामीटर" हो सकते हैं), लेकिन प्रथम श्रेणी के मान नहीं हैं, अर्थात, टेम्पलेट सामान्य कार्यों के पैरामीटर नहीं हो सकते हैं। इसी तरह उदाहरण के लिए एमएल में मॉड्यूल / फंक्शंस।
एंड्रियास रॉसबर्ग

@AndreasRossberg जावा 8 उनके प्रश्न का एक वैध उत्तर नहीं होगा? फ़ंक्शंस प्रथम श्रेणी के नागरिक नहीं हैं, लेकिन जावा तरीके फ़ंक्शंस प्राप्त कर सकते हैं (कार्यात्मक इंटरफेस के माध्यम से), जैसा कि आपके द्वारा वर्णित "पैरामीटर जो फ़ंक्शन विशेष रूप से व्यवहार किए जाते हैं, और" साधारण "मान मापदंडों से भिन्न होते हैं।"
अब्दुल

1

प्रथम श्रेणी के कार्य कर सकते हैं:

  • चरों में संग्रहित होना
  • एक समारोह से लौटा हो।
  • दूसरे फ़ंक्शन में तर्क के रूप में पारित किया जाए।

हाई ऑर्डर फंक्शन एक फ़ंक्शन है जो किसी अन्य फ़ंक्शन को वापस करता है।

उदाहरण के लिए:

function highOrderFunc() {
  return function () {
    alert('hello');
  };
}

0

प्रथम श्रेणी के कार्यों का अर्थ है कि आप अन्य प्रकारों (चर, बूलियन, संख्या ...) के साथ सब कुछ कर सकते हैं, आप इसे कार्यों के साथ कर सकते हैं।

उदाहरण के लिए, उन्हें चर पर असाइन करें, इसे पास करें, उन्हें मक्खी पर बनाएं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.