2013-04-23 50 views
1

我有這樣的哈斯克爾腳本:理解總理測試

prime :: Integer -> Bool  
prime 1 = False 
prime n = [ x | x <- [2..n-1], n `mod` x == 0 ] == [] 

是什麼在上線第一x代表什麼?爲什麼我可以用「String」替換它,並且整個功能仍然有效?

回答

6

在列表理解|之前的部分是將被用於生成所得到的列表的每個元素的表達式。

在這種情況下,該功能只在乎是否在一個空列表或不在列表理解的結果,因此列表中的元素並不重要。你可以把(),x,1或任何實現Eq的類型的值放在那裏。如果您使用null而不是== []來檢查是否有空,它可能是任何東西,即使是undefined

+0

「如果你使用'null',而不是'== []'檢查空虛,它可能是任何東西,甚至'undefined'。」無論如何,它可能是任何東西,即使是「未定義」。 – newacct 2013-04-23 19:27:30

+0

@newacct:不,列表中的Eq實例需要元素的Eq實例,即使我們從未實際調用它。例如,它不能是'undefined :: a - > a'。 – hammar 2013-04-24 00:23:12

+0

@newacct:好的,所以你說得對'null'比'== []'更好,因爲'== []'不適用於不是'Eq'的東西。然而,「undefined」本身起作用,所以你的答案的一部分沒有意義。 – newacct 2013-04-24 06:11:38