对于项目欧拉问题#1#1,最短的一个班轮在GHCI是:项目欧拉:在Haskell实施
sum [3,6..9999] + sum [5,10..9999] - sum [15,30..9999]
我发现这个后,我解决了这个问题是一个非常血腥的方式。然而,由于我是Haskell的新手,我决定看看我是否可以将它作为一组返回类似于x的任何值(步长值,即上面的'3'或'5')和。Y(列表的长度)
我都第一个函数在这里完成的。
sumList :: (Enum a, Num a) => a -> a -> a
sumList a b = sum[a,a+a..b]
接下来我试图把这个功能和做,例如一些诸如sumListTotals [3,5] 1000
从问题那么这一切sumList
为列表中的每个项目,然后一个减去重复的数字(即[15,30..1000]使用该示例。
我不是l为某人实际解决问题而提供的帮助,以帮助我指引我走向正确的方向。
我尝试使用map
功能类似如下:
sumListTotals list = map f list
where f = sumlist a b
但是,我不知道该如何从列表中拔出的东西,或者如果我这样做sumListTotals ([3,5],1000)
或完全对我是这里错了吗?每@ user5402
更新:
module Project1 where
import Data.List (union)
sumListTotals :: (Enum a, Eq a, Num a) => a -> a -> a -> a
sumListTotals a b c = sum $ union [a,(*2)a..c] [b,(*2)b..c]
对于算法解决方案,请查看[Data.List.union](http://hackage.haskell.org/packages/archive/base/latest/doc/html/Data-List.html#v:工会) – ErikR 2013-04-25 02:04:38
嗯......这是一个很酷的功能。 =)..因为我终于有空闲时间了,所以我会尽快发布。 – flamusdiu 2013-04-26 21:25:45
我认为使用'union'是一个更干净/更清晰的解决方案,然后使用where子句。虽然,我不知道如何读取函数的类型信号。我欺骗并用':t'使用ghci来生成sig。 :P – flamusdiu 2013-04-26 21:52:50