2013-07-29 84 views
3

我想在Haskell使用下面的代碼/功能:爲什麼模式匹配不在Haskell的封面列表中?

test :: String -> String -> Bool 
test (x:xs) (x:ys) = True 
test _  _ = False 

這應該檢查是否兩份名單完全相同的元素開始。
但這不起作用。
我的編譯器說:Conflicting definitions for x

我認爲這樣的模式匹配必須在功能語言中工作。我剛剛和Prolog合作過,我很確定它在那裏工作:/

這是不是在Haskell中實現,或者是我的語法錯誤?

+0

當列表包含無法比較的項目(例如函數)時,會產生隱式比較的問題。允許這種隱式比較可能(可能)使語法不太清晰。雖然存在與數字常量匹配的奇怪事物,它使用整數和比較。 – Laar

回答

6

你可能想要那樣的東西。

test :: String -> String -> Bool 
test (x:xs) (y:ys) = x == y 
test _  _ = False 

由於@TikhonJelvis注意到,haskell不是Prolog,所以你不能檢查模式匹配中的變量的平等。

3

模式匹配不統一變量。

test :: String -> String -> Bool 
test (x:xs) (y:ys) = x == y 
test _  _ = False 

因此,您可以像上面那樣分別測試每個變量是否相等。