खोज…


किसी प्रकार की सूची का उलटा

किसी सूची को उलटने के लिए, यह महत्वपूर्ण नहीं है कि सूची तत्व किस प्रकार के हैं, केवल वे किस क्रम में हैं। यह एक सामान्य कार्य के लिए एक आदर्श उम्मीदवार है, इसलिए समान प्रत्यावर्तन फ़ंक्शन का उपयोग किया जा सकता है चाहे कोई भी सूची पास हो।

let rev list =
    let rec loop acc = function
        | []           -> acc
        | head :: tail -> loop (head :: acc) tail
    loop [] list

कोड तत्वों के प्रकारों के बारे में कोई धारणा नहीं बनाता है। संकलक (या एफ # इंटरएक्टिव) आपको बताएगा कि इस फ़ंक्शन का प्रकार हस्ताक्षर 'T list -> 'T list'T आपको बताता है कि यह एक सामान्य प्रकार है जिसमें कोई बाधा नहीं है। आप 'T बजाय 'a देख सकते हैं 'a - पत्र महत्वहीन है क्योंकि यह केवल एक सामान्य स्थानधारक है। हम एक int list या एक string list पास कर सकते हैं, और दोनों क्रमशः एक int list या एक string list वापस करते हुए, सफलतापूर्वक काम करेंगे।

उदाहरण के लिए, एफ # इंटरएक्टिव में:

> let rev list = ...
val it : 'T list -> 'T list
> rev [1; 2; 3; 4];;
val it : int list = [4; 3; 2; 1]
> rev ["one", "two", "three"];;
val it : string list = ["three", "two", "one"]

किसी सूची को किसी भिन्न प्रकार में मैप करना

let map f list =
    let rec loop acc = function
        | []           -> List.rev acc
        | head :: tail -> loop (f head :: acc) tail
    loop [] list

इस समारोह के हस्ताक्षर ('a -> 'b) -> 'a list -> 'b list , जो सबसे सामान्य हो सकता है। इसे रोकने नहीं करता है 'a होने के रूप में एक ही प्रकार के होने से 'b , लेकिन यह भी उन्हें अलग होने की अनुमति देता है। यहाँ आप देख सकते हैं कि 'a प्रकार है कि कार्य करने के लिए पैरामीटर है f के प्रकार से मेल खाना चाहिए list पैरामीटर। यह फ़ंक्शन अभी भी सामान्य है, लेकिन इनपुट पर कुछ मामूली बाधाएं हैं - यदि प्रकार मेल नहीं खाते हैं, तो एक संकलन त्रुटि होगी।

उदाहरण:

> let map f list = ...
val it : ('a -> 'b) -> 'a list -> 'b list
> map (fun x -> float x * 1.5) [1; 2; 3; 4];;
val it : float list = [1.5; 3.0; 4.5; 6.0]
> map (sprintf "abc%.1f") [1.5; 3.0; 4.5; 6.0];;
val it : string list = ["abc1.5"; "abc3.0"; "abc4.5"; "abc6.0"]
> map (fun x -> x + 1) [1.0; 2.0; 3.0];;
error FS0001: The type 'float' does not match the type 'int'


Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow