>> 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. -- To UNSUBSCRIBE, email to debian-russian-requ...@lists.debian.org with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org