大多数"英语和" Project Euler#1的解决方案

时间:2012-01-12 23:01:24

标签: haskell

初学者Haskell在这里学习。我已经解决了Project Euler Problem 1,3或5的倍数之和小于1000,但我正在寻找一个“更像英语的”功能表示。

我创建了一个名为multiples

的函数
multiples::(Integral a) => a -> [a]
multiples a = map (*a) [1..]

我很满意,但我希望我能说

multiples of::(Integral a) => a -> [a]
multiples of a = map (*a) [1..]

阅读更像英语,但我在输入'of'

时得到一个解析错误

我希望我的功能声明能够读取:

sum of multiples of::(Type)=>Type->Type

有什么希望吗?

1 个答案:

答案 0 :(得分:9)

这有点傻,但你可以定义“单词”,并忽略你的“英语”函数中的参数:

by = ()
multiply a _ b = a*b

multiply 10 by 12
--120

但是在您的示例中,您运气不佳,因为of是一个关键字(在case of中使用)。

顺便说一下,这是另一种定义倍数的方法:

multiples_of = scanl1 (+) . repeat

take 10 $ multiples_of 12
--[12,24,36,48,60,72,84,96,108,120]