2010-06-02 89 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..]作为参数调用(无论如何这将是一个类型错误)。