haskell按模式打印多个变量

时间:2013-03-05 23:14:24

标签: haskell

我开始在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方法可以做到这一点

1 个答案:

答案 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