Поиск длины строки

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 у них есть свои собственные детали внутренней реализации, которые делают их более эффективными, чем простой связанный список символов.

Смотрите также