2014-09-03 61 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