2014-10-18 34 views
0

這是代碼。Haskell - 過濾器和頭部如何結合在一起工作?

largestDivisible :: (Integral a) => a 
largestDivisible = head (filter p [100000,99999..]) 
    where p x = x `mod` 3829 == 0 

我有點困惑。這種情況下p是多少?此外,我不明白在這個特定的例子中的表達式,因爲我們得到了兩個表達式,左邊是p和x,我們有一個對齊,實際上它是一個布爾值。

我將不勝感激,如果有人能解釋我上面的代碼。

+0

所以,這意味着對於第一種情況: p 100000 然後,它計算第如果100000可以被3829整除,它將返回真。對嗎? – tumbler 2014-10-18 00:32:04

+0

是的,但是你需要考慮在這種情況下'過濾器'的作用。一旦你理解了當'p'返回'True'時'filter'做了什麼,'p'返回'False'時''過濾器'做了什麼,你可以知道'head'的作用。 – 2014-10-18 10:21:07

+0

@SassaNF:過濾器的類型是(a - > Boolean) - > [a] - > [a]。在那種情況下,它返回100000的錯誤。所以第一個參數是錯誤的,這就是爲什麼100000沒有放在新構建的列表中。是這樣的嗎? – tumbler 2014-10-19 10:48:37

回答

2

p是一個函數,它接受一個參數x並返回True僅當x是整除3829.您可以使用where定義局部功能就像你定義局部「值」,使用您使用相同的f x = y語法定義頂級功能。

+0

第二個p與第一個p有什麼關係? – tumbler 2014-10-18 00:21:04

+0

例如過濾器> 5 [4,2,3,8,7]將返回[8,7]。所以在這種情況下,第一個p將等於> 5。但在上面的例子中,p是什麼? – tumbler 2014-10-18 00:28:34

+0

列表不是無限的嗎?這不是問題嗎? 首先應用「過濾器」。但是,如果列表是無限的,那麼'過濾器'將永遠不會完成它的工作? – tumbler 2014-10-18 00:35:24

相關問題