मैं F# में एक नए बिल्ट-इन फंक्शन (list.fold) का उपयोग करना चाहता था। मेरे पास संख्याओं के साथ एक सूची है और मुझे इसे अधिकतम वापस करना होगा। यदि सूची खाली है तो इसे 0 होना चाहिए। मैंने इसे इस तरह हल करने का प्रयास किया:
let max a b : Nat = if a > b then a else b
let maxofList = List.fold max
let maximum (xs: Nat list): Nat = maxofList xs
मैं इसे संकलित नहीं कर सकता और मुझे नहीं पता कि इसे किसी अन्य तरीके से कैसे हल किया जाए, शायद मैं वास्तव में समझ नहीं पा रहा हूं कि अंतर्निहित फ़ंक्शन कैसे काम करता है। इनपुट इस तरह दिखता है:
maximum [12N; 4N; 67N; 5N] = 67N
1 उत्तर
जैसा कि टिप्पणियों में उल्लेख किया गया है, यह थोड़ा भ्रमित करने वाला है कि आप Nat
प्रकार का उपयोग कर रहे हैं - यह एक कस्टम प्रकार है जो आपके द्वारा उपयोग की जा रही लाइब्रेरी में कहीं परिभाषित है, मानक F# प्रकार नहीं। आप चीजों को अपने Nat
प्रकार के साथ काम करने में सक्षम होना चाहिए, लेकिन मैं चीजों को सरल बना दूंगा और एक पूर्णांक का उपयोग करूंगा।
अब, आपका कोड लगभग सही है। एकमात्र समस्या यह है कि List.fold
वर्तमान स्थिति को अगले तत्व के साथ संयोजित करने के लिए एक फ़ंक्शन लेता है (यह आपका max
है) लेकिन इसके लिए एक प्रारंभिक स्थिति की भी आवश्यकता होती है। यह एक ऐसी संख्या होनी चाहिए जो आपकी सूची में किसी भी चीज़ से छोटी हो। यदि आपके पास केवल सकारात्मक संख्याएँ हैं, तो आप शून्य का उपयोग कर सकते हैं:
let max a b : int = if a > b then a else b
let maxofList = List.fold max 0 // Added '0' as an extra parameter here!
let maximum (xs: int list): int = maxofList xs
आपके मामले में, यह संभवतः 0N
होगा। वैकल्पिक रूप से, आप List.reduce
का उपयोग कर सकते हैं जो सूची के पहले तत्व को प्रारंभिक मान के रूप में लेता है और सूची खाली होने पर विफल हो जाता है:
let maxofList = List.reduce max
संबंधित सवाल
नए सवाल
list
सूची टैग का उल्लेख हो सकता है: एक लिंक की गई सूची (नोड का एक सेट सेट, प्रत्येक इसका उत्तराधिकारी संदर्भित करता है), या डायनामिक सरणी का एक रूप। HTML सूचियों के लिए उपयोग नहीं किया जा रहा है, इसके बजाय [html-सूचियों] का उपयोग करें।