जबकि पहले से पोस्ट किए गए उत्तर हैं p आपके पोस्ट कोड क्यों काम नहीं करते हैं, इस बारे में गलत तरीके से मान्य है, मैं तर्क दूंगा कि एक लूप और एक परिवर्तनीय चर का उपयोग करना बहुत नहीं है ... कार्यात्मक। तो मैंने सोचा कि मैं इसे और अधिक एफ # - इसे सुलझाने का मूर्ख तरीका पोस्ट करूंगा।
आप बताते हैं कि ".NET का उपयोग नहीं कर सकता"। मैं अनुमान लगा रहा हूं कि आप किसी अंतर्निहित कार्यों या .NET पुस्तकालयों का उपयोग नहीं कर सकते हैं। बेशक, इसका मतलब यह भी है कि आप F # primitives का उपयोग करके स्वयं को लागू कर सकते हैं।
कार्यात्मक दुनिया में एक आम कार्य fold
है, जो एक अनुक्रम के सभी तत्वों के लिए एक फ़ंक्शन लागू करता है, जबकि उस फ़ंक्शन को एक संचयक में वापस रखने के दौरान। निर्मित संस्करण Seq.fold
है, लेकिन चूंकि हम चाहते हैं कि उपयोग नहीं कर सकते हैं, तो हम एक अपने आप को परिभाषित करेंगे:
let rec fold accFn arr acc =
match arr with
| [||] -> acc
| _ -> fold accFn arr.[1..] (accFn arr.[0] acc)
इस के साथ ही बुला प्रत्येक तत्व को accFn
समारोह लागू होता है जो एक पुनरावर्ती समारोह है, और उसके बाद सरणी का शेष। जब यह एक खाली सरणी पारित हो जाती है, तो रिकर्सन समाप्त हो जाता है।
जब हम कि है, के fold
में पारित करने के लिए कुछ सरल कार्यों को परिभाषित करते हैं:
let min x y =
if x < y then x
else y
let max x y =
if x > y then x
else y
let sum x y =
x + y
एक बार जब हम कि, ने कहा समस्या का समाधान सरल है:
let arrX= [|9; 11; 3; 4; 5; 6; 7; 8|]
let head = arrX.[0]
let avg = (fold sum arrX 0)/arrX.Length
let minValue = fold min arrX head
let maxValue = fold max arrX head
उपयोग Array.max, Array.min, Array.average द्वारा फ्लोट – BLUEPIXY