Re: Perl or Python?
>> AD>> У меня на этапе изучения лиспа было очень яркое впечатления от
>> AD>> одной очень мелкой задачки, которая была решена на лиспе. Надо было
>> AD>> транспонировать матрицу. Решение состояло из вызова 3-х(трёх)
>> AD>> функций, которые не имеют никакого отношения к матрицам, вообще
>> AD>> никакого. То есть ни циклов, ничего такого, просто 3 строки, в
>> AD>> каждой вызов одной функции, вложенный в другую. В лиспе также нет
>> AD>> НИКАКИХ инструментов для обработки матриц. Делайте выводы.
>>
>> > Вообще-то, можно одной строкой:
>> > (apply #'map 'list matrix),
>> > где matrix - список списков
>> О! Верх изящества. Вспоминается пример, как дядечка в середине 70-х
>> разбирал несколько ЧАСОВ(!) 4(!!!) строки на языке APL.
>> 35 лет прошло, и никто ничему так и не научился :-/
> Это неудачная шутка?.. Какая связь между 4 строками, которые пришлось
> разбирать несколько часов, и вызовом трёх функций, понятным с первого
> взгляда?
Открываем первое, что находится под рукой, Emacs,
вбиваем туда эти три строки.
(setq matrix '((1 2 3) (4 5 6) (7 8 9)))
(apply #'map 'list matrix)
Не работает.
Debugger entered--Lisp error: (invalid-function (1 2 3))
(1 2 3)(4 7)
mapcar*((1 2 3) (4 5 6) (7 8 9))
apply(mapcar* (1 2 3) (4 5 6) (7 8 9))
map(list (1 2 3) (4 5 6) (7 8 9))
apply(map list ((1 2 3) (4 5 6) (7 8 9)))
eval((apply (function map) (quote list) matrix))
eval-last-sexp-1(nil)
eval-last-sexp(nil)
call-interactively(eval-last-sexp)
Ладно, Emacs Lisp - не Common Lisp.
Это вообще не Лисп...
Сходил за книжкой в другую комнату.
Открываем первый том двух-томника "Мир лиспа", смотрим заглавие.
Ага, apply - страница 246, читаем, apply - функция двух переменных.
В примере 4. Все. 5 минут прошло. Мое время и терпение иссякли.
Искать и ставить настоящий CommonLisp и искать его документацию, чтобы
вспомнить, что читал несколько лет назад и вроде бы знал мне некогда.
При этом гораздо больше строк
function transposition (matrix A [N,M])
matrix B = create_matrix (M, N)
for i in 1,N
for j in 1,M
B [j, i] = A [i, j]
end
end
return B
end
понимают _абсолютно все_ мгновенно.
--
Best regards, Aleksey Cheusov.
Reply to: