Skip to content

Instantly share code, notes, and snippets.

@cyclotimia
Last active August 19, 2023 09:59
Show Gist options
  • Save cyclotimia/516e191fbd257f2fc160 to your computer and use it in GitHub Desktop.
Save cyclotimia/516e191fbd257f2fc160 to your computer and use it in GitHub Desktop.
haskell Test
{--
Реализуйте функцию, задающую циклическое вращение списка.
rotate :: Int -> [a] -> [a]
rotate n xs = undefined
При положительном значении целочисленного аргумента вращение должно осуществляться влево, при отрицательном - вправо.
GHCi> rotate 2 "abcdefghik"
"cdefghikab"
GHCi> rotate (-2) "abcdefghik"
"ikabcdefgh"
Не забывайте обеспечить работоспособность вашей реализации на бесконечных списках (для сценариев, когда это имеет смысл) и разумную эффективность при большом числе вращений небольшого списка:
GHCi> :set +s
GHCi> rotate 1234567890 [1..10]
[1,2,3,4,5,6,7,8,9,10]
(0.00 secs, 0 bytes)
--}
rotate :: Int -> [a] -> [a]
rotate _ [] = []
rotate n xs | n == 0 = xs
| n > 0 =
zipWith const (drop n $ cycle xs) xs
| n < 0 =
let l = length xs
nn = n `rem` l in
zipWith const (drop (nn + l) $ cycle xs) xs
{--
Пусть имеется параметрически полиморфная функция foo :: a -> a -> a.
Передайте ей четыре аргумента, так чтобы получившееся выражение foo arg1 arg2 arg3 arg4 имело бы тип Bool.
--}
-- функция foo :: a -> a -> a уже определена в вызывающем коде
f:: a -> a -> Bool
f x y = True
arg1 = f
arg2 = f
arg3 = f
arg4 = f
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment