首页 > 解决方案 > 使用所有可能性在 Haskell 中旋转列表

问题描述

标签: listhaskellfunctional-programming

解决方案


您可以避免对 的任何调用length,以及对 的重复调用cycle和更大的参数drop,而是将任何其他无限列表压缩到有限输入列表,以将它们修剪为您期望的大小,丢弃后面的元素:

circle xs = let trim ys = zipWith const ys xs
            in trim . map trim . iterate tail . cycle $ xs

*Main> circle "abc"
["abc","bca","cab"]

推荐阅读