M>>parse_dirs([]) -> M>> []; M>>parse_dirs([H|T]) -> M>> [H, get_files(H)] ++ [parse_dirs(T)].
G>странный формат. у тебя в списке чередуются директории и списки файлов. Нехорошо. G>Возьми их в тупл, штоль.
Ага, есть такое Это одна из итераций формата. В один момент были и туплы. Сейчас уже не помню, почему остановился на таком.
get_files(Dirs) ->
[{Y,filelib:file_size(Y)}|| Y <- lists:append([filelib:wildcard(X++"/*")||X <- Dirs])].
Это захватит и директории тоже. Вдобавок список получается не очень хорошим — сначала идут все абсолютно директории и поддиректории, а потмо все файлы во всех поддиректориях
CS>Для сравнения то же самое но на моем tiscript (вариант ECMAScript)
function xdir( path )
{
function foreach(n, func)
{
func(n); // вызываем func для каждого node файловой системы.// а что за func и откуда берется? :)if( n.isdir )
for(var sn in n.nodes) foreach( sn, func );
}
foreach( new FileSystem.Node(path),
function(n) { stdout.printf("%s,%d\n",n.path, n.size); } );
}
// поехали!
xdir("/");
CS>В принципе по всем половым признакам ECMAScript (JavaScript) это ФЯ.
M> function foreach(n, func) M> { M> func(n); // вызываем func для каждого node файловой системы. M> // а что за func и откуда берется?
Передается как параметр в функцию.
Собственно говоря, чем это отличается от Delphi.Net?
(в Delphi/Win32 и Turbo Pascal нет встроенныx итераторов, конструкция типа Visual Vasic'овского for each VAR in COLLECTION do )
анонимными функциями (да и то не уверен насчет Delphi для грядущего повсеместно .Net 2) ?
Честно говоря по-моему обычный императивный код по сути.
M>get_files(Dirs) ->
M> [{Y,filelib:file_size(Y)}|| Y <- lists:append([filelib:wildcard(X++"/*")||X <- Dirs])].
M>
M>Это захватит и директории тоже. Вдобавок список получается не очень хорошим — сначала идут все абсолютно директории и поддиректории, а потмо все файлы во всех поддиректориях
Отфильтровать забыл.
get_files(Dirs) ->
[{Y,filelib:file_size(Y)}|| Y <- lists:append([filelib:wildcard(X++"/*")||X <- Dirs]),not filelib:is_dir(Y)].
M>В общем мне понравилось Но вопрос — а можно еще кратчее и красивше
В общем, мне не понравилось Не обрабатываются директории, содержащие Юникод. Видать что-то где-то надо править ручками.... Ну да ладно, мне пока и этого хватает
Здравствуйте, Lazy Cjow Rhrr, Вы писали:
CS>>В принципе по всем половым признакам ECMAScript (JavaScript) это ФЯ.
LCR>Только "грязный" — куча побочных эффектов. Плюс:
Что имеется ввиду? Какие побочные эффекты?
LCR>Что возвращяет функция foreach?
все функции чег-то возвращают. Если явно не задано то
в стандарте определено что возвращается undefined value в этом случае.
LCR>Что возвращает функция xdir?
undefined.
LCR>Лямбды — это уже интересно
А вот кстати есть ли где определение ФЯ как классов?
Что должен иметь язык чтобы он считался ФЯ?
А зачем тут анонимную функцию объявлять ?
Нельзя разве напрямую передать is_dir ?
К осожалению, насколько понял, синтаксис первый вариант не пропустит (а почему? не умеет, или есть принципиальные возражения?), но второй должен работать.
Здравствуйте, Arioch2, Вы писали:
A>К осожалению, насколько понял, синтаксис первый вариант не пропустит (а почему? не умеет, или есть принципиальные возражения?)
A>
Это с двоеточием-то ? И все равно могли какой-нибудь синтаксис придумтаь про красивше и попонятнее
Кстати, обычные термы могут начинаться с подчеркивание или нет? Если могут, то как отличать терм от переменной, по первой букве которая не-подчеркивание ?