项目欧拉问题:1 注意:GHCi实现:type' main'输出结果
3和5的倍数
问题: 如果我们列出10以下的所有自然数是3或5的倍数,我们得到3,5,6和9.这些倍数的总和是23。
查找低于1000的3或5的所有倍数的总和。
-- all multiples of 3 less than 1000
multOfThree = [3*x | x <- [1..333] ]
-- all multiples of 5 less than 1000
multOfFive = [5*x | x <- [1..199] ]
-- common values of the two lists
commonValues = [x | x <- multOfThree, x <- multOfFive]
-- list of all multiples, subtract commonValues (as there are two copies - one per list)
multiplesOfThreeOrFive = (multOfThree ++ multOfFive) -- commonValues
sumOfMultiples = sum multiplesOfThreeOrFive
-- display sum:
main = print sumOfMultiples
答案 0 :(得分:1)
有两件事情不按你的意图行事:
要对列表使用设置差异,请使用\\
中的Data.List
。 --
实际上开始发表评论。
import Data.List ((\\))
multiplesOfThreeOrFive = (multOfThree ++ multOfFive) \\ commonValues
或跳过commonValues并使用Data.List.union
。
commonValues = [x | x <- multOfThree, x <- multOfFive]
不幸的是,你无法翻译常用的数学符号并将''''''符号转换为<-
。原因是,它只是“共同的”,而不是正式的数学:第一个<-
意味着迭代第一个集合,第二个是谓词(条件)。您可以直接将其写为
commonValues = [x | x <- multOfThree, x `elem` multOfFive]
如chi所述。
这些是“产生错误结果”的错误。在related code review question中,您将获得进一步的建议。