Простое управление строкой haskell

Есть небольшая проблема, которую я хочу решить с помощью Haskell: позвольте заменить функцию, которая изменяет все символы подстановки в строке для одного конкретного параметра. Функция имеет сигнатуру:

subs :: String -> String -> String -> String
-- example:
-- subs 'x' "x^3 + x + sin(x)" "6.2" will generate
--          "6.2^3 + 6.2 + sin(6.2)"
В чем разница между методом "==" и equals()
В чем разница между методом "==" и equals()
Это один из наиболее часто задаваемых вопросов новичкам на собеседовании. Давайте обсудим его на примере.
Замена символа по определенному индексу в JavaScript
Замена символа по определенному индексу в JavaScript
В JavaScript существует несколько способов заменить символ в строке по определенному индексу.
3
0
2 448
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Ответ принят как подходящий

Вы можете использовать пакет Text.Regex.

Ваш пример может выглядеть примерно так:

import Text.Regex(mkRegex, subRegex)

subs :: String -> String -> String -> String
subs wildcard input value = subRegex (mkRegex wildcard) input value

См. http://bluebones.net/2007/01/replace-in-haskell/ для примера, который выглядит точно так же, как и фрагмент кода, который вы ищете.

Используйте регулярные выражения (Text.Regex.Posix) и поиск-замену для /\Wx\W/ (нотация Perl). Простая замена x на 6.2 вызовет проблемы с x + quux.

Haskell Regex заменить для получения дополнительной информации (я думаю, это должно быть импортировано в SO.

Для дополнительной сложности вы можете проанализировать свое выражение как AST и выполнить замену на этом уровне.

@paullrulan: Надеюсь, вы не пытаетесь выполнять символьную математику БЕЗ правильного парсера / AST. Строки для этого - кошмар ... Пожалуйста, скажите мне, что вы не пытаетесь заменить переменные лексически вместо AST ...

Jared Updike 06.10.2008 04:48

Вы можете использовать библиотеку простой текстовый формат для таких случаев:

import Text.Format
format "{0}^3 + {0} + sin({0})" ["6.2"]

Другие вопросы по теме