Haskell字符串旋转功能

a3yko

我需要编写一个Haskell函数采用一个StringsIntegeri,然后进行i正确的旋转s

rotate :: String -> Integer -> String

我已经成功地使用了它,String -> Int -> String但是被要求去做Integer

这就是我实现的Int

rotate str n = take (length str) $ drop (negate n `mod` length str) $ cycle str

威廉·范昂塞姆

问题是drop :: Int -> [a] -> [a]Intas作为类型参数。此外length :: Foldable f => f a -> Int,例如产生一个Int这样就行不通了。

但是,存在适用于Integral类型的通用变体,Num例如genericDrop :: Integral i => i -> [a] -> [a]genericLength :: Num i => [a] -> i

import Data.List(genericDrop, genericLength, genericTake)

rotate :: Integral i => [a] -> i -> [a]
rotate str n = genericTake l (genericDrop ((-n) `mod` l) (cycle str))
    where l = genericLength str

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章