2009-09-26 17 views
5

Ocaml projesi boyunca çeşitli yerlerde aşağıdaki yapı ile karşılaştım. İlk bakışta"Match ... true -> foo | false -> bar" Ocaml'da özel bir anlam ifade ediyor mu?

match something with 
    true -> foo 
    | false -> bar 

, her zamanki if deyimi gibi çalışır. İkinci bakışta, her zamanki gibi if ifade gibi çalışır! Üçüncü bakışta, SO'ya sormaya karar verdim. Bu yapının, özel durumlarda önemli olan if ifadesinden özel bir anlamı veya ince bir farkı var mı?

cevap

11

Evet, bu bir if ifadesidir.

Genellikle match olgu if daha OCaml kodunda daha yaygındır, bu nedenle düzgünlüğü için kullanılabilir.

+2

Kabul ediyorum ama diğer bir deyişle olacaktır: Ben ML programlama Eğer desenler bir süre sonra her yerde maç için bkz yapar düşünüyorum , İlk önce "x ile eşleştir" yazıp bundan sonra düşünmeye başla. –

+2

Yalnızca bir if ifadesine eşdeğer olmakla kalmaz, eğer ifadeler derleyici tarafından bu şekilde desugared olursa hepsi büyük olasılıktır. –

2

Önceki cevaba katılıyorum, bir if ifadesinin çalışmasını yapar, ancak bundan daha esnektir.

birisi

Ayrıca Link here

eşleşen deseni kullanmanın yollarını açıklayan bu öğretici bir göz atın belirtti "desen eşleştirme ancak 10 kat daha güçlü bir switch deyimi olan", OCaml desen eşleştirme kullanırken yoludur Örneğin, basit olanlara bir liste, başlığın ve kompoze verileri kırmak izin çok daha

> Let imply v = 
    match v with 
    | True, x -> x 
    | False, _ -> true;; 

    > Let head = function 
    | [] -> 42 
    | H:: _ -> am; 

    > Let rec sum = function 
    | [] -> 0 
    | H:: l -> h + sum l;; 
+0

Kullanışlı örnekler ve OCaml öğrenenler için iyi bir hatırlatma için teşekkür ederiz. Benim sorum, ancak, genel olarak 'match' kullanımıyla ilgili değildi, ama bir boolean değeri 'true' ve' false 'ile eşleştiğinde, bunun belirli bir kullanımı hakkındaydı. Bu gibi durumlarda aslında 'if' operatörü olarak çalışır. David'in cevabı ve sonraki yorumları bunu açıklıyor. –