nickm
А что за задача такая интересная, может её как-то по другому можно решить?
1) Я собираюсь проанализировать книжку, извлечь все устойчивые сочетания слов.
2) на каждую фразу выдавать статистически самые частые варианты её развития.
Поначалу я делал это влоб, но выяснилось что даже пол странички обрабатывалось долго. Потому думаю нужно, что-бы каждое слово знало свои фразы и одинаковые концы фраз могли обмениваться своими вариантами развития, в противном случае боюсь, что конца разбора текста я просто не дождусь.
Конечно рекурсивно это получается красиво и компактно, но меня дико смущает большое количество вложенных функций вкупе с куцым лимитом на глубину рекурсии.(В ченджлогах писали, что рекурсию оптимизировали, но фигли они оптимизировали, если даже хвостовая рекурсия здесь неоптимизирована!?) Потому может мне все рекурсивные операции на итератарах сделать, что-бы избежать возможных проблем?
Предложение, умеющее возвращать из себя все возможные фразы пока что у меня выглядит так(да if у меня долбанутые, просто так визуально красивее):
Код: Выделить всё
#########################
class Word
def initialize desc
@item = desc[0]
@fate = []
@desc = if (desc[1] != nil) then Word.new desc[1..-1] else nil end #descendant word
end
def sevenfate # !!!NEED REMEMBER!!!
return fate([]) + @desc.sevenfate if @desc != nil
return fate([]) if @desc == nil
end
def fate tail
return [tail + [@item]] + @desc.fate(tail + [@item]) if @desc != nil
return [tail+ [@item]] if @desc == nil
end
end
word = Word.new ['neko','like','green','grass']
word.sevenfate.each{|item| p item}