爲什麼下面的Haskell腳本不能按預期工作?Haskell中的變量
find :: Eq a => a -> [(a,b)] -> [b]
find k t = [v | (k,v) <- t]
鑑於find 'b' [('a',1),('b',2),('c',3),('b',4)]
,解釋返回[1,2,3,4]
,而不是[2,4]
。引入新的變量,以下稱爲u
,要得到這個工作:
find :: Eq a => a -> [(a,b)] -> [b]
find k t = [v | (u,v) <- t, k == u]
有誰知道爲什麼第一個變體不會產生期望的結果?
在我之後重複一遍:Haskell中沒有變量。 ;-)這些是符號或標識符。變量意味着可變性。在Haskell中,一切都是不變的。 – 2010-10-29 16:28:02
@Konrad Rudolph:Haskell 98報告在整個地方使用術語「變量」。重要的是要注意這並不意味着你可能期望的,但我認爲比標準文檔更具有人性化是非常有幫助的。 – 2010-10-29 16:31:21
@Konrad魯道夫:當然你在開玩笑!爲什麼,我已經找到了關於變量的一整段內容[在Haskell中,在這裏](http://books.google.com/books?id=27dkTJFrLZIC&pg=PA111)。 – 2010-10-29 16:52:48