2010-08-28 15 views
8

Haskell'in desen eşleşmesinde rastgele bir argüman sayısına eşdeğer bir OCaml var mı? Desen, rasgele sayıdaki argümanlarla nasıl eşleştirilir?

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 

(örnek Amaç Caml :)

teşekkür ile Uygulama Geliştirme gelen oynatan: Örneğin, ben benzeyen bir şey olabilir.

+1

Örneğinizin rastgele bir sayıda argüman aldığını söylemem, işlev tam olarak iki argüman alır. – adamse

+0

adamse: true, ama sorum, birden fazla bağımsız değişken alan herhangi bir işlev için geçerlidir. –

cevap

14

Aşağıdaki gibi birden fazla argüman maç olamaz, ancak bunu böylece, tupleları eşleşebilir:

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 

Eğer fonksiyonu da kullanabileceğiniz bir demet olarak argümanları alarak Tamam iseniz Bu gibi 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) 
İlgili konular