Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Haskell维基上的Project Euler#2解决方案_Haskell - Fatal编程技术网

Haskell维基上的Project Euler#2解决方案

Haskell维基上的Project Euler#2解决方案,haskell,Haskell,我刚刚开始读一点关于Haskell的书,只写了一点点代码,这意味着我是一个完全的Haskell新手 项目Euler问题#2如下: 斐波那契序列中的每个新项都是通过将前两项相加生成的。从1和2开始,前10个术语将是: 1、2、3、5、8、13、21、34、55、89 通过考虑Fibonacci序列中值不超过400万的项,求偶数值项之和 我自己创建斐波那契数的第一步很幼稚(而且很慢/很昂贵)。失败后,我去寻找解决办法。这个有好几种,我觉得第一种非常优雅,但我不完全理解。这是我的代码(where/fi

我刚刚开始读一点关于Haskell的书,只写了一点点代码,这意味着我是一个完全的Haskell新手

项目Euler问题#2如下:

斐波那契序列中的每个新项都是通过将前两项相加生成的。从1和2开始,前10个术语将是:

1、2、3、5、8、13、21、34、55、89

通过考虑Fibonacci序列中值不超过400万的项,求偶数值项之和

我自己创建斐波那契数的第一步很幼稚(而且很慢/很昂贵)。失败后,我去寻找解决办法。这个有好几种,我觉得第一种非常优雅,但我不完全理解。这是我的代码(where/fibs结构被拆分为可读性和修补性)

p::Integer

p=sum[x | x函数的工作原理是将列表左移1,然后将其添加到自身中

你告诉它,
fibs=1:1:something
,从中可以看出
tail-fibs=1:something
。所以
zipWith(+)fibs(tail-fibs)
1+1=2开始


现在haskell知道了
fibs=1:1:2:something
,它可以无限地继续为您生成更多的术语。

fibs
函数通过将列表左移一个并将其添加到自身中来工作

你告诉它,
fibs=1:1:something
,从中可以看出
tail-fibs=1:something
。所以
zipWith(+)fibs(tail-fibs)
1+1=2开始


现在haskell知道了fibs=1:1:2:something
,它可以无限期地继续为您生成更多的术语。

这个问题在这里得到了很好的回答:@ErikVesteraas谢谢链接,我专门搜索了与euler相关的问题。这个问题在这里得到了很好的回答:@ErikVesteraas谢谢在链接中,我专门搜索了与euler相关的问题。
p :: Integer
p = sum [ x | x <- takeWhile (< 4000000) fibs, even x]

fibs :: [Integer]
fibs = 1 : 1 : zipWith (+) fibs (tail fibs)

main :: IO()
main = do
    print $ p
    -- BEWARE print $ fibs