sh :: Double -> Double
sh x = undefined
Реализуйте функцию sh
, вычисляющую гиперболический синус:
Функцию, проверяющую, является ли строка палиндромом, можно определить следующим образом:
isPalindrome :: String -> Bool
isPalindrome xs = xs == reverse xs
В простых случаях функция работает правильно:
s1 = "ABOBA"
a1 = isPalindrome s1
Однако, если входные данные содержат символы в разных регистрах и пробелы, вызов функции выдаёт отрицательный результат:
s2 = "Лёша на полке клопа нашёл"
a2 = isPalindrome s2
Проблему, можно решить, переведя все символы в строке в верхний или нижний регистр, и убрав из неё все пробелы:
s3 = "ЛЁШАНАПОЛКЕКЛОПАНАШЁЛ"
a3 = isPalindrome s3
Для перевода символов в верхний регистр, Haskell предоставляет функции
toUpper
и toLower
, определённые в модуле Data.Char
:
import Data.Char
aInUpperCase = toUpper 'a'
aInLowerCase = toLower aInUpperCase
На множестве символов определено отношение эквивалентности:
isSpaceASpace = ' ' == ' '
Определите функцию isPalindrome2
, проверяющую, является ли строка
палиндромом, но не учитывающую регистр символов и пробелы в строке:
isPalindrome2 :: String -> Bool
isPalindrome xs = undefined
Реализуйте функцию replaceAt
, которая заменяет i
-й элемент списка
xs
на значение v
.
replaceAt :: a -> [a] -> Int -> [a]
replaceAt v xs i = undefined
Пример использования функции:
xs = ['a', 'b', 'c', 'd']
xs1 = replaceAt 'A' xs 0
-- ['A', 'b', 'c', 'd']
xs2 = replaceAt 'D' xs 3
-- ['a', 'b', 'c', 'D']
xs21 = replaceAt 'C' xs 2
-- ['a', 'b', 'C', 'd']
xs3 = replaceAt 'A' xs (-1)
-- "error: index out of range"
xs4 = replaceAt 'B' [] 0
-- "error: index out of range"
xs5 = replaceAt 'E' xs 4
-- "error: index out of range"
Напишите функцию dropEveryNth
, удаляющую каждый n
-й элемент из
списка xs
.
dropEveryNth :: [a] -> Int -> [a]
dropEveryNth xs n | n <= 0 = error "n should be greater than 0"
dropEveryNth xs n = undefined
Пример использования функции:
xs = [1,2,3,4,5,6,7,8,9,10]
xs1 = dropEveryNth xs 1
-- []
xs2 = dropEveryNth xs 2
-- [1,3,5,7,9]
xs3 = dropEveryNth xs 3
-- [1,2,4,5,7,8,10]