项目欧拉#1使用Haskell

import Data.Set

euler :: Int
euler = sum [ x | x <- nums ]
    where
    nums = Data.Set.toList (Data.Set.union (Data.Set.fromList [3,6..999])
                                           (Data.Set.fromList [5,10..999]))

我正在学习Haskell,并希望你不介意我问这个问题。 有没有更好的方法来获得一个列表,其中所有自然数都低于1000,是3或5的倍数? (例如用zip或地图?)

编辑:

import Data.List

euler :: Int
euler = sum (union [3,6..999] [5,10..999])

感谢您的帮助,伙计们。


使用列表理解:

sum [x | x <- [1..999], x `mod` 3 == 0 || x `mod` 5 == 0]

你也可以使用硬编码版本:

sum $ [3, 6 .. 999] ++ [5, 10 .. 999] ++ [-15, -30 .. -999]

这会给你你要求的清单:

filter (x -> (x `mod` 3 == 0) || (x `mod` 5 == 0)) [1..999]
链接地址: http://www.djcxy.com/p/80421.html

上一篇: Project Euler #1 using Haskell

下一篇: Project Euler #3 in Erlang