我开始在Haskell中编写project euler个问题的答案,就像这样
problem1 = ...
problem2 = ...
将它们全部显示在一起我一直在使用这样的东西
problems x = "print $ zip [1..] [" ++ intercalate "," (take x stringList) ++ "]"
where
stringList = map ("fromIntegral problem"++) stringInts
stringInts = map show [1..]
main = print $ zip [1..] [fromIntegral problem1,fromIntegral problem2,...] (copy-pasta from ghci'ing problems string)
有没有办法在没有复制粘贴的情况下执行此操作?
我研究了用m4定义宏但是我遇到了将problemi转换为problem1的问题。 m4也有像中缀操作员反叛的问题,如
x `mod` 3 == 0
所以我不得不将整个文档的其余部分包含在m4块注释中
我研究了定义c预处理器宏,但据我所知,循环(或根本不是循环)不支持
我希望有一种Haskell方法可以做到这一点
答案 0 :(得分:2)
你真的需要一次显示它们吗?这真的不是一件好事。
无论如何,您可以稍微更改界面,而不是(problem1, problem2, ...) :: (Integral a) => a
执行problem :: (Integral a) => Int -> a
:
problem 1 = ...
problem 2 = ...
然后收集所有问题是:
problems = zipWith ($) (repeat problem) [1..2]
main = print $ zip [1..] problems