2010-08-28 10 views
8

क्या एक ओकैमल है जो तर्कसंगत संख्याओं पर मेल खाने वाले हास्केल के पैटर्न के बराबर है?तर्कों की मनमानी संख्या पर पैटर्न कैसे मिलान करें?

merge [] lst = lst 
merge lst [] = lst 
merge l1 @ (n : ns) l2 @ (m : ms) = 
    if n < m then n : merge ns l2 else m : merge l1 ms 

(उदाहरण के वस्तुनिष्ठ CAML :)

धन्यवाद के साथ अनुप्रयोगों के विकास से उठाया है: उदाहरण के लिए, मैं कुछ मिलते-जुलते हो सकता है।

+1

मैं यह नहीं कहूंगा कि आपका उदाहरण तर्कों की मनमाना संख्या लेता है, फ़ंक्शन में दो तर्क होते हैं। – adamse

+0

adamse: true, लेकिन मेरा प्रश्न किसी भी फ़ंक्शन पर एक से अधिक तर्क लेने पर लागू होता है। –

उत्तर

14

आप इस तरह के रूप में कई तर्क से मेल नहीं कर सकते हैं, लेकिन आप, tuples मिलान कर सकते हैं ताकि आप कर सकते हैं:

let rec merge l1 l2 = match l1, l2 with 
| [], lst 
| lst, [] -> lst 
| (n::ns), (m::ms) -> if n < m then n :: merge ns l2 else m :: merge l1 ms 

आप समारोह एक टपल आप भी उपयोग कर सकते हैं के रूप में अपने तर्कों लेने के साथ ठीक कर रहे हैं function इस तरह:

let rec merge = function 
| [], lst 
| lst, [] -> lst 
| (n::ns as l1), (m::ms as l2) -> if n < m then n :: merge (ns, l2) else m :: merge (l1, ms) 
संबंधित मुद्दे