[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

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: