Haskell:
Поиск длины строки
Как:
-- Использование функции `length`
main = do
let myString = "Привет, Haskell!"
print $ length myString
Пример вывода:
15
Подробнее
Haskell - это чисто функциональный язык, где строки представлены как списки символов. Функция length
, часть Prelude (библиотеки по умолчанию, импортируемой в каждую программу на Haskell), работает именно с таким представлением.
Исторически, строки как списки были естественным выбором для Haskell из-за их простоты и того факта, что Lisp сделал аналогичный выбор дизайна (и повлиял на многие функциональные языки). Функция length
просто подсчитывает элементы в этом списке.
Однако, length
имеет сложность O(n), что означает, что функция будет работать время, пропорциональное длине строки. Это не проблема для коротких строк, но для длинных может быть неэффективно.
Альтернативы включают:
- Использование
Text
из пакетаtext
, более эффективной структуры для текста в кодировке Unicode. - Использование
ByteString
из пакетаbytestring
для двоичных данных или данных ASCII.
Оба предлагают функцию length
, оптимизированную для своих соответствующих структур данных.
С точки зрения реализации, базовая версия функции length
может выглядеть так:
myLength :: [a] -> Int
myLength [] = 0 -- Длина пустого списка равна 0
myLength (_:xs) = 1 + myLength xs -- Рекурсивно добавляем 1 для остальной части списка
Для типов данных Text
и ByteString
у них есть свои собственные детали внутренней реализации, которые делают их более эффективными, чем простой связанный список символов.