[erlang] - практическая задача - покритикуйте решение
От: DemAS http://demas.me
Дата: 12.02.09 11:12
Оценка:
Небольшой этап первой практической задачи на Erlang — прочитать файл и
составить список из слов в него входящих. Покритикуйте, пожалуйста, код:

-module(ft).
-export([process_file/0]).

process_file()->
    {ok, Device} = file:open("data.txt", [read]),
    Lines = get_all_lines_in_file(Device, []),
    process_all_lines(Lines, []).

get_all_lines_in_file(Device, Accum)->
    case io:get_line(Device, "") of
    eof ->
        file:close(Device),
        Accum;
    Line -> 
        get_all_lines_in_file(Device, Accum ++ [Line])
end.

process_all_lines([T|H], Accum)->
    NewAccum = get_all_words_in_line(T, Accum),
    process_all_lines(H, NewAccum);
process_all_lines([], Accum) ->
    Accum.
    
get_all_words_in_line(Line, Accum)->
    case string:chr(Line, $ ) of
    0 ->
        Accum ++ [Line];
    Idx ->
        get_all_words_in_line(string:substr(Line, Idx + 1), Accum ++ [lists:sublist(Line, Idx)])
end.


Кстати, стоит ли избавляться от переменных в методах?
Вместо:
    Lines = get_all_lines_in_file(Device, []),
    process_all_lines(Lines, []).


писать:
    process_all_lines(get_all_lines_in_file(Device, []), []).


?

Просто второй вариант мне кажется менее читабельным. Хотя, наверное, это с
непривычки.
Posted via RSDN NNTP Server 2.1 beta
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.