私はちょうどHaskellの学習を始め、偶数長のリストと奇数長のリストの2つの関数を書いています。これは[0..7]の[even]関数が[0,7,2,5,4,3,6,1]を返し、[0..8]の 'odd'関数が[0、 7,2,5,4,3,6,1,8] - これは私が必要とする結果です。 しかし、私はまだ多くの作業の後に、私はそれらを組み合わせることができないので、ただ一つの関数が両方のリストに対して機能するようになっています。ここに関数があり、より経験豊かなHaskellのコーダーが解決策を知っているかどうか疑問に思いました。Haskell関数の開始時に定数を定義する
funcOdd :: [Int] -> [Int]
funcOdd [] = []
funcOdd (x:xs) = take (n+1) ((x*2) : (pred n - x):funcOdd(xs)) where n = length xs
funcEven :: [Int] -> [Int]
funcEven [] = []
funcEven (x:xs) = take (n+1) ((x*2) : (n - x):funcEven(xs)) where n = length xs
この機能の意図された意味および/または目的を説明できると便利です。これは何か数学的かもしれないようなにおいがする。根底にある意味を考えれば、コードを見つめるよりも簡単でクリーンなソリューションにつながる可能性があります。 – dfeuer