2010-06-02 25 views
-2
largestDivisible :: (Integral a) => a 
largestDivisible = head (filter p [100000,99999..]) 
    where p x = x `mod` 3829 == 0 

如果p x等於真,解釋largestDivisible代碼的瞭解你的Haskell的大好事教程

確實

head (filter p [100000,99999..]) 

成爲

head (filter True) 

哪些列表正在過濾爲True?

當這段代碼正在運行時,p和x的值是什麼?

+1

你的問題是無法理解的 - 我不確定你究竟是什麼*詢問*。 – 2010-06-02 18:59:29

回答

4

filter p [100000,99999..]計算列表包括所有數字從100000降序,其中p返回true。 head然後採取先說名單,有效地爲您提供最大的數字x 100000以下,爲此p x返回true,即對於這x `mod` 3829爲0

在P和X什麼樣的價值觀?

p是一個函數,它接受一個名爲x的參數並返回true iff x `mod` 3829 == 0x是賦予該函數的參數。既然你使用p作爲參數進行過濾,這意味着列表[100000,99999..]的每個元素將依次給予p,直到p第一次返回true(它不會嘗試更多的元素,因爲通過使用head,你只需要一個元素,所以它只計算一個元素)。

+0

p何時返回true? – 2010-06-02 19:14:52

+1

@Deliriumtremens:如果(且僅當)''x'mod' 3829 == 0'',即如果x不能被餘數3829整除,'p x'返回true。 – sepp2k 2010-06-02 19:28:40

3

p是由p x = x `mod` 3829 == 0定義的函數。

xp函數中的一個變量。 filter與來自列表[100000,99999..]的元素調用p,所以x將成爲該列表的成員之一。

filter p [100000,99999..]相同(filter p) [100000,99999..]filter (p [100000,99999..])。所以p而不是[100000,99999..]作爲參數調用(無論如何這將是一個類型錯誤)。