Re: Perl or Python?
AD>> У меня на этапе изучения лиспа было очень яркое впечатления от
AD>> одной очень мелкой задачки, которая была решена на лиспе. Надо было
AD>> транспонировать матрицу. Решение состояло из вызова 3-х(трёх)
AD>> функций, которые не имеют никакого отношения к матрицам, вообще
AD>> никакого. То есть ни циклов, ничего такого, просто 3 строки, в
AD>> каждой вызов одной функции, вложенный в другую. В лиспе также нет
AD>> НИКАКИХ инструментов для обработки матриц. Делайте выводы.
> Вообще-то, можно одной строкой:
> (apply #'map 'list matrix),
> где matrix - список списков
О! Верх изящества. Вспоминается пример, как дядечка в середине 70-х
разбирал несколько ЧАСОВ(!) 4(!!!) строки на языке APL.
35 лет прошло, и никто ничему так и не научился :-/
> Но хотел бы я посмотреть на законченную реальную программу, которой бы
> надо было работать с матрицами, и чтобы матрицы в ней были представлены
> списками. :-)
AFAIR существуют алгоритмы, которые реализуют списки с операциями
'head', 'tail', 'cons', 'n-th' и кажется еще и 'append' впридачу с
трудоемкостью не хуже O(log(N)). Причем, в статье, которую я читал
специльно указывавалось, что это, мол, актуально для функциональных
языков, таких как Лисп и ML. Учитывая, что на практике log(N) всегда
меньше 128, можно считать, эти операции имеют трудоемкость O(1), то есть
выполняются за константное время.
Лиспофилам эта информация, естественно, ни к чему ;-) Они никогда не
занимаются оценкой трудоемкости алгоритмов, которые пишут. O(N^2), там
где положено быть O(N), их нисколько не пугает. А экспонента -- вообще
полная фигня, машины сейчас быстрые, и память дешевая.
Вывод: с точки зрения идеологии введение в лисп массивов -- бестолковый
и непродуманный прогиб под практику. Точно такой же прогиб, как
всяческие Objective приставки к CAML-у.
А о том, что такое введение "аккумуляторов" для обеспечения хвостовой
рекурсии я вообще никому не скажу, потому что это непечатная лексика.
--
Best regards, Aleksey Cheusov.
Reply to: