我正在使用 GHCi 尝试解决 Project Euler 上的问题 2。
http://projecteuler.net/problem=2
我将无限列表 fibs 定义为:
Prelude> let fibs = 1 : 2 : zipWith(+) fibs (tail fibs)
我尝试以下列方式使用列表推导:
前奏> [x | x<-fibs, x
mod
2 == 0, x<4000000] [1,2,3,5,8,13,21,34,55,89,144,233,377,610,987,1597,2584,4181,6765,10946,17711,28657, 46368,75025,121393,196418,317811,514229,832040,1346269,2178309,3524578
前奏>总和$[x| x <- [1..], xmod
2 == 0, x<4000000]
但是 shell 挂在第二个命令上。我对为什么列表理解可以构建列表但 sum 函数无法处理它感到困惑。
我发现一个可行的解决方案是
Prelude> sum $ filter even $ takeWhile (<= 4000000) fibs
但是,当列表理解方法不起作用时,我再次感到困惑。