Как-то, маясь бездельем, читал про применение цепей Маркова (они же Норма́льные алгори́фмы Ма́ркова) для 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')
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.
Комментариев нет:
Отправить комментарий