largestDivisible :: (Integral a) => a
largestDivisible = head (filter p [100000,99999..])
where p x = x `mod` 3829 == 0
Run Code Online (Sandbox Code Playgroud)
如果px等于True,
确实
head (filter p [100000,99999..])
Run Code Online (Sandbox Code Playgroud)
成为
head (filter True)
Run Code Online (Sandbox Code Playgroud)
?
哪些列表正在过滤True?
在运行此代码时,p和x的值是多少?
filter p [100000,99999..]计算列表,包括所有从100000下降的数字,其中p返回true。head然后使用该列表的第一个,有效地为您提供小于100000的最大x,该x p x返回true,即为x `mod` 38290。
p和x中有什么值?
p是一个函数,它接受一个称为x且返回true iff的参数x `mod` 3829 == 0。x是赋予函数的参数。由于您将p用作过滤的参数,因此这意味着列表中的每个元素[100000,99999..]都会依次赋予p,直到p第一次返回true为止(它不会再尝试其他任何元素,因为使用head,您可以re仅请求一个元素,因此它只计算一个)。