Есть ли стандартный способ разбить строку в Haskell?
lines
и words
отлично работает от разделения на пробел или новую строку, но наверняка есть стандартный способ разделения на запятую?
Я не смог найти его в Google.
Чтобы быть конкретным, я ищу что-то, где split "," "my,comma,separated,list"
возвращается ["my","comma","separated","list"]
.
Data.List
или дажеPrelude
. Это так распространено и неприятно, если не доступно для код-гольфа.Ответы:
Существует пакет для этого, который называется сплит .
Используйте это так:
Он поставляется с множеством других функций для разделения на совпадающие разделители или с несколькими разделителями.
источник
split
split
вbuild-depends
список в своем файле cabal, например, если ваш проект называется hello, то вhello.cabal
файле подexecutable hello
строкой поместите строку наподобие `build-зависимость: base, split` (обратите внимание на два пробела). Затем выполните сборку с помощьюcabal build
команды. Ср haskell.org/cabal/users-guide/…Помните, что вы можете посмотреть определение функций Prelude!
http://www.haskell.org/onlinereport/standard-prelude.html
Глядя там, определение
words
есть,Итак, измените его на функцию, которая принимает предикат:
Тогда назовите это с любым предикатом, который вы хотите!
источник
Если вы используете Data.Text, есть splitOn:
http://hackage.haskell.org/packages/archive/text/0.11.2.0/doc/html/Data-Text.html#v:splitOn
Это встроено в платформу Haskell.
Так, например:
или:
источник
text
пакета или установить его. Будет принадлежать в другой вопрос, хотя.В модуле Text.Regex (часть платформы Haskell) есть функция:
которая разбивает строку на основе регулярного выражения. API можно найти на сайте Hackage .
источник
Could not find module ‘Text.Regex’ Perhaps you meant Text.Read (from base-4.10.1.0)
Использование
Data.List.Split
, которое используетsplit
:источник
Попробуй это:
Работает только для одного символа, но должен легко расширяться.
источник
Не импортируя ничего в качестве прямой замены одного символа на пробел, целевым разделителем
words
является пробел. Что-то вроде:или
Вы можете превратить это в функцию с параметрами. Вы можете исключить параметр символьного соответствия для моего соответствия многим, как в:
источник
Например
Один конечный разделитель будет удален:
источник
Я начал изучать Haskell вчера, так что поправьте меня, если я ошибаюсь, но:
дает:
или, может быть, вы хотели
который будет:
источник
split
, избалованную языками с хорошо развитыми библиотеками. Но все равно спасибо.Я не знаю, как добавить комментарий к ответу Стива, но я бы хотел порекомендовать
документацию по библиотекам GHC ,
и там, в
частности, функции Sublist в Data.List
Что гораздо лучше в качестве справки, чем просто чтение простого отчета на Haskell.
Как правило, ее следует решить также с помощью правила о том, когда создавать новый подсписок для подачи.
источник
В дополнение к эффективным и заранее созданным функциям, приведенным в ответах, я добавлю свои собственные, которые просто являются частью моего набора функций Haskell, которые я писал для изучения языка в свое свободное время:
Решения по крайней мере рекурсивные, поэтому они не повлекут за собой переполнение стека.
источник
Пример в ghci:
источник
ghci
?Я нахожу это проще для понимания:
источник