2008-09-15 34 views
3

Hases ile çözmek istediğim küçük bir problem: , bir beton parametresi için bir dizgideki tüm joker karakterleri değiştiren bir işlevi değiştirebilir.Basit haskell string yönetmek

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)" 

cevap

6

Sen Text.Regex paketini kullanabilirsiniz: fonksiyonu de imzası vardır.

Sizin örnek şu şekilde görünebilir:

import Text.Regex(mkRegex, subRegex) 

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

Düzenli ifadeler kullanın (Text.Regex.Posix) ve /\Wx\W/ için arama yapın (Perl notasyonu). x'un 6.2'a değiştirilmesi, size x + quux ile sorun getirecektir. Daha fazla bilgi için

Haskell Regex Replace (Ben buna SO ithal edilmesi gerektiğini düşünüyorum.

Eğer AST olarak ifade ayrıştırmak ve bu seviyenin üzerinde değiştirme yapabileceği ekstra sert çekirdekli için.

+0

@paullrulan. sana uygun bir ayrıştırıcı/AST OLMADAN sembolik matematik yapmak çalışmıyoruz umut dizeleri bunun için bir kabus vardır ... söyle sen yoksun t Değişkenleri yerine AST ile değişkenler yerine ... –

2

Sen kullanabilirsiniz bu gibi durumlarda metin formatlı-basit kitaplığı:

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