2008-09-15 4 views
3

Theres는 하스켈로 해결하고자하는 약간의 문제입니다. 하나의 구체적인 매개 변수에 대해 문자열의 모든 와일드 카드를 변경하는 함수를 대체 할 수 있습니다. 이 함수의 서명은 다음과 같습니다.단순한 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)" 

답변

6

Text.Regex 패키지를 사용할 수 있습니다.

귀하의 예는 다음과 같이 보일 수 있습니다 :

import Text.Regex(mkRegex, subRegex) 

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

정규 표현식 (Text.Regex.Posix)을 사용하고 /\Wx\W/ (Perl 표기)에 대한 검색 교체. x6.2으로 바꾸기 만하면 x + quux으로 문제가 발생할 것입니다. 자세한 내용은

Haskell Regex Replace (I이가 너무 가져올한다고 생각합니다.

는 AST로 표현을 구문 분석하고 그 수준에서 교체 할 수있는 여분의 하드 코어.

+0

@paullrulan :. 난 당신이 적절한 파서/AST없이 상징적 인 수학을하려고하지 않는 희망 문자열은 그 악몽은 ... 알려주세요 너는 아니야. AST 대신 변수를 어휘 적으로 대체하려고 시도하지 않습니다. –

2

당신은 을 사용할 수 있습니다 이 경우 텍스트 형식의 단순 라이브러리 :

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