5

インターレース要素を分離する関数を書きました。

interlacedElems :: [a] -> ([a], [a])
interlacedElems xs = (f xs, f $ tail xs)
   where f (x:_:xs) = x : f xs
         f x = x

main = print $ interlacedElems "a1b2c3d4"

生成される出力:

("abcd","1234")

私のコードではf、同じリストを効果的に 2 回再帰的に定義して 2 回使用しますが、毎回少しずつ異なります。

私の質問は、リストを一度だけ再帰するようにこれを書く方法はありますか? そのほうが効率がいいからね。

私は脳の一部が漏れていることを理解しようとしましたが、母は私がいつも脳汁をいたるところに持っていて、カーペットからピンクの染みを取り除くのに何年もかかると言ったので、私に言いました.

素敵な人々に感謝します:)

4

2 に答える 2