“средняя длина последовательностей в файле фесты”: можно ли улучшить этот код Erlang?

Я пытаюсь получить среднюю продолжительность использования последовательностей фесты Erlang. Файл фесты похож на это

>title1
ATGACTAGCTAGCAGCGATCGACCGTCGTACGC
ATCGATCGCATCGATGCTACGATCGATCATATA
ATGACTAGCTAGCAGCGATCGACCGTCGTACGC
ATCGATCGCATCGATGCTACGATCTCGTACGC
>title2
ATCGATCGCATCGATGCTACGATCTCGTACGC
ATGACTAGCTAGCAGCGATCGACCGTCGTACGC
ATCGATCGCATCGATGCTACGATCGATCATATA
ATGACTAGCTAGCAGCGATCGACCGTCGTACGC
>title3
ATCGATCGCATCGAT(...)

Я попробовал к answser этот вопрос с помощью следующего кода Erlang:

-module(golf).
-export([test/0]).

line([],{Sequences,Total}) ->  {Sequences,Total};
line(">" ++ Rest,{Sequences,Total}) -> {Sequences+1,Total};
line(L,{Sequences,Total}) -> {Sequences,Total+string:len(string:strip(L))}.

scanLines(S,Sequences,Total)->
        case io:get_line(S,'') of
            eof -> {Sequences,Total};
            {error,_} ->{Sequences,Total};
            Line -> {S2,T2}=line(Line,{Sequences,Total}), scanLines(S,S2,T2)
        end  .

test()->
    {Sequences,Total}=scanLines(standard_io,0,0),
    io:format("~p\n",[Total/(1.0*Sequences)]),
    halt().

Компиляция/Выполнение:

erlc golf.erl
erl -noshell -s golf test < sequence.fasta
563.16

этот код, кажется, хорошо работает для маленького файла фесты, но требуются часы для парсинга большего (> 100 мес). Почему? Я - новичок Erlang, можно ли улучшить этот код?

6
задан Pierre 21 July 2010 в 08:07
поделиться