2014-09-03 31 views
1

因此,我正在學習F#並且一直在研究列表經常用於模式匹配。我看到了2種不同的List模式,我試圖弄清楚它們之間的區別。2種列表模式之間的差異

因此,可以說,我們正在做的模式字符的列表匹配,像這樣

let charlist = ['x';'y';'z'] 

,我們像這樣被匹配它,

match charlist with 

這將是這兩個情況之間的差異?

​​

回答

4

當然,你可以要求編譯器:

> match charlist with   
- |[a;b;c] ->()     
- |a::b::c::[] ->()    
- | _ ->();;     

    |a::b::c::[] ->() 
    -^^^^^^^^^^^ 

/home/john/stdin(13,2): warning FS0026: This rule will never be matched 

由於第二條規則是永遠不會匹配,你知道第一次做時,它只會匹配,從而使第二個是匹配第一條規則的一個子集。反轉訂單會產生相同的錯誤消息。因此,我們知道它們是相同的。

+0

不錯。我會通過編譯這兩個選項到程序集然後檢查IL來請求編譯器。這更快更容易。 – phoog 2014-09-08 19:47:39