2009-11-22 18 views
4

在Haskell中,有沒有比較所有通配符具有相同類型和值的方法?例如,我想創建表現出以下行爲的函數:比較通配符在Haskell中是否相等?

(1 M) (2 M) (3 M) -> True 
(1 S) (2 S) (3 S) -> True 
(1 S) (2 M) (3 S) -> False 

換句話說,第一個參數應爲1,2和3,第二個參數應該是所有的S或全部M.

在這種情況下,我們也許可以寫一個函數如下:

matches (1 _) (2 _) (3 _) 

但是,我們如何判斷通配符是否全部爲S或所有的M?

+1

這是否意味着您正在尋找S&M? – ThisSuitIsBlackNot

回答

4

你要做的平等檢查明確,通過使用命名變量,而不是通配符:

matches (1 a) (2 b) (3 c) | a == b && b == c = something 

(正如一個側面說明:(1 a)是不是一個有效的模式,你需要(1,a)或一些其他類型的構造函數)

5

如果模式很簡單(所有M或全部S),爲什麼不定義它?

matches (1, M) (2, M) (3, M) = True 
matches (1, S) (2, S) (3, S) = True 
matches _ _ _ = False 

或者還有其他限制嗎?

+0

是的,實際上有10個constriants ... – pokiman