[ create a new paste ] login | about

Link: http://codepad.org/3v0Mw0c9    [ raw code | output | fork ]

Haskell, pasted on Dec 21:
import Data.List
import Data.Maybe
        
data MarkovS = Sub String|Fin String deriving Show -- продукции : обыкновенная или финальная
type MarkovE = (String, MarkovS)
type MarkovD = [MarkovE] -- словарь

markov rules text = loop ("", Sub "") text -- первый луп - холостой
  where
      loop (p, Fin s) str = replaceFirst (p,s) str -- финал: заменяем и выходим
      loop (p, Sub s) str = loop new_ME new_str
                        where
                          new_str = replaceFirst (p,s) str -- заменяем
                          new_ME = findFirst rules new_str -- ищем пару для замены

      findFirst :: MarkovD -> String -> MarkovE
      findFirst (x@(p,_):xs) s =
        if p `isInfixOf` s -- если в s содержится строка для замены
           then x          -- просто возвращаем текущий MarkovE
           else findFirst xs s
      findFirst [] _ = ("", Fin "") -- если не нашли, то финальная пустая продукция     
      

      findSubstringIndex text pattern =
                findIndex (pattern `isPrefixOf`) (tails text)

      replaceFirst  ([],_) text = text
      replaceFirst  (old, new) text = start ++ new ++ drop n end
          where
              n = length old
              i = fromJust $ findSubstringIndex text old
              (start,end) = splitAt i text

bin2unD :: MarkovD
bin2unD = [("|0", Sub "0||"), ("1", Sub "0|"), ("0", Sub "")]

un_divD :: MarkovD
un_divD = [( "%*" , Sub "*%" ),( "%|" , Sub "%*" ),( "*|" , Sub "**" ),( "|*" , Sub "t" ),( "t*" , Sub "*t" ),( "t%" , Sub "%t" ),( "%t" , Sub "%v|" ),( "t" , Sub "|" ),( "%v" , Sub "?d" ),( "?d" , Sub "d?" ),( "|d" , Sub "d|" ),( "?" , Sub "%" ),( "*d" , Sub "h" ),( "h*" , Sub "oh" ),( "h%" , Sub "h" ),( "h" , Sub "" ),( "*" , Sub "" ),( "d" , Sub "|_" ),( "/|" , Sub "-k" ),( "k|" , Sub "kk" ),( "k" , Sub "|+" ),( "+|" , Sub "|+" ),( "-" , Sub "ey" ),( "|e" , Sub "e|" ),( "y" , Sub "%" ),( "eo" , Sub "0o" ),( "e" , Sub "" ),( "|_" , Sub ".a" ),( "a." , Sub ".a" ),( ".." , Sub "." ),( ".aaaaaaaaaa" , Sub "a,." ),( ",a" , Sub "a," ),( ".aaaaaaaaa" , Sub "9" ),( ".aaaaaaaa" , Sub "8" ),( ".aaaaaaa" , Sub "7" ),( ".aaaaaa" , Sub "6" ),( ".aaaaa" , Sub "5" ),( ".aaaa" , Sub "4" ),( ".aaa" , Sub "3" ),( ".aa" , Sub "2" ),( ".a" , Sub "1" ),( "." , Sub "0" ),( "," , Sub "" ),( "a" , Sub ".a"  ),( "o" , Sub "p||||||||||" ),( "|p" , Sub "p|" ),( "pp" , Sub "p" ),( "%" , Sub "u" ),( "u+" , Sub "u" ),( "u" , Sub "_" ),( "|+" , Sub "|)+" ),( ")" , Sub "(>" ),( ">+" , Sub "+>" ),( "+" , Sub "{" ),( "{" , Sub "|" ),( ">>>>>" , Sub "=" ),( "|=" , Sub "=" ),( "(=" , Sub "=" ),( "(" , Sub "/" ),( "p=" , Sub "=<" ),( "<0" , Sub "0<" ),( "<1" , Sub "1<" ),( "<2" , Sub "2<" ),( "<3" , Sub "3<" ),( "<4" , Sub "4<" ),( "<5" , Sub "5<" ),( "<6" , Sub "6<" ),( "<7" , Sub "7<" ),( "<8" , Sub "8<" ),( "<9" , Sub "9<" ),( "<<<<<" ,Sub "$" ),( "0$" , Sub "$0" ),( "1$" , Sub "$1" ),( "2$" , Sub "$2" ),( "3$" , Sub "$3" ),( "4$" , Sub "$4" ),( "5$" , Sub "$5" ),( "6$" , Sub "$6" ),( "7$" , Sub "$7" ),( "8$" , Sub "$8" ),( "9$" , Sub "$9" ),( "=$" , Fin "." ),( "0=" , Sub "=0" ),( "1=" , Sub "=1" ),( "2=" , Sub "=2" ),( "3=" , Sub "=3" ),( "4=" , Sub "=4" ),( "5=" , Sub "=5" ),( "6=" , Sub "=6" ),( "7=" , Sub "=7" ),( "8=" , Sub "=8" ),( "9=" , Sub "=9" ),( "_>" , Sub "" ),( "0>" , Sub ">0" ),( "1>" , Sub ">1" ),( "2>" , Sub ">2" ),( "3>" , Sub ">3" ),( "4>" , Sub ">4" ),( "5>" , Sub ">5" ),( "6>" , Sub ">6" ),( "7>" , Sub ">7" ),( "8>" , Sub ">8" ),( "9>" , Sub ">9" ),( "p>" , Sub "" ),( "p" , Fin "." ),( "_" , Fin ".0" ) ]


main = undefined


Output:
1
2

Program error: Prelude.undefined


Create a new paste based on this one


Comments: