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,希望你不介意我问这个 . 有没有更好的方法来获得一个列表,其中包含的所有自然数低于一千,是3或5的倍数? (例如带拉链或 Map ?)
编辑:
import Data.List
euler :: Int
euler = sum (union [3,6..999] [5,10..999])
伙计们,感谢您的帮助 .
7 回答
使用列表理解:
您也可以使用硬编码版本:
这将为您提供您要求的列表:
这是一个 .
这是另一种效率较低的方式:
(如果我们有import语句,我们不必使用完全限定名称) .
同样有趣的是找到只有3和5的倍数:
对于数字列表而不仅仅是3和5的更通用的解决方案:
这是超快速的 . 尝试使用超过十亿的 Value .
我想它可以进一步缩短 .