0

私はHaskellでプロジェクトオイラーの問題に対する答えをそのように書き始めました

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プリプロセッサマクロの定義を検討しましたが、forループ(またはループ)がサポートされていないことがわかります。

これを行うHaskellの方法があることを願っています

4

1 に答える 1

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
于 2013-03-06T00:31:19.017 に答える