28 августа 2008

Норма́льные алгори́фмы Ма́ркова

Как-то, маясь бездельем, читал про применение цепей Маркова (они же Норма́льные алгори́фмы Ма́ркова) для reduce в какой-то документ-ориентированной БД. И вспомнил, что однажды сетовал на их отсутствие под рукой. Раскрыл таблетку и написал:

 1 class Chain < Array
 2 def reduce(input)
 3   each do |link|
 4     while !input.gsub!(link[0],link[1]).nil?
 5       return input if link[2]
 6     end
 7   end
 8   input
 9 end
10 end
11 #Sample
12 c=Chain.new
13 c << [/aa/,'a'] << [/bb/,'b', true] << [/cc/,'c']
14 puts c.reduce('aacccabbaabbbb')

Для простоты link[0] есть L, link[1] есть D, link[2] есть конечность правила.
Больше кейвордов, чем кода, ей б-гу.
PS.: Да, на maemo есть ruby.

Комментариев нет: