मैं 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
0
Denis 27 नवम्बर 2018, 15:49

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
3
Tomas Petricek 27 नवम्बर 2018, 13:10