OCaml

2011-09-11 12 views
9

में मिलान पैटर्न और करीकरण मिश्रण एसएमएल में, करी और पैटर्न मिलान दोनों का उपयोग करके एक फ़ंक्शन को परिभाषित करना आम और आसान है। यहाँ एक सरल उदाहरण है:OCaml

fun zip [] _ = [] 
    | zip _ [] = [] 
    | zip (x::xs) (y::ys) = (x,y)::(zip xs ys) 

पुस्तकालय कार्यों की अनदेखी करते हुए OCaml को यह बंदरगाह के लिए सबसे अच्छा तरीका क्या है? जहां तक ​​मैं कह सकता हूं, करी और पैटर्न मिलान दोनों का उपयोग करके फ़ंक्शन घोषित करने का कोई आसान तरीका नहीं है।

उत्तर

11

मैं कहूंगा कि एक मैच अभिव्यक्ति का उपयोग करना सबसे अच्छा है।

let rec zip xs ys = 
    match xs, ys with 
    | [], _ 
    | _, [] -> [] 
    | x :: xs, y :: ys -> (x, y) :: zip xs ys 

यदि आप मैच का उपयोग नहीं कर रहे हैं, तो यह थोड़ा उलझन में है, लेकिन आप यह कर सकते हैं।

let rec zip = function 
    | [] -> (fun _ -> []) 
    | x :: xs -> 
     function 
     | [] -> [] 
     | y :: ys -> (x, y) :: zip xs ys