largestDivisible :: (Integral a) => a
largestDivisible = head (filter p [100000,99999..])
where p x = x `mod` 3829 == 0
如果p x等于True,
确实
head (filter p [100000,99999..])
成为
head (filter True)
为True过滤了哪些列表?
在运行此代码时,p和x的值是什么?
答案 0 :(得分:4)
filter p [100000,99999..]
计算列表,包括从100000开始的所有数字,其中p返回true。 head
然后获取该列表的第一个,有效地为您提供低于100000的最大数字x,其中p x
返回true,即x `mod` 3829
为0。
p和x中有什么值?
p是一个函数,它接受一个名为x
的参数,并返回true iff x `mod` 3829 == 0
。 x
是赋予函数的参数。由于使用p作为参数进行过滤,这意味着列表[100000,99999..]
的每个元素将依次赋予p,直到p第一次返回true(它不再尝试任何元素,因为使用head,你只需要一个元素,所以它只计算一个元素。
答案 1 :(得分:3)
p
是由p x = x `mod` 3829 == 0
定义的函数。
x
是p
函数中的变量。 filter
使用列表p
中的元素调用[100000,99999..]
,因此x
将成为该列表的成员之一。
filter p [100000,99999..]
与(filter p) [100000,99999..]
相同,不是 filter (p [100000,99999..])
。所以p
不以[100000,99999..]
作为参数调用(无论如何它都是类型错误)。