Entry tags:
Обработка элемента множества в контексте "соседей"
Вот тут http://levgem.livejournal.com/420910.html задают вопрос, который меня тоже сильно интересует - есть ли такая высокоуровневая операция, которая бы позволила абстрагировать обработку элемента (упорядоченного) множества в контексте взаимодействия этого элемента с его соседями.
Вроде
antilamer что-то похожее писал про комонады, но мне без конкретной задачи сложно осознать, как это использовать.
Вот например map, filter, fold - я их понял от входа, потому что очевидная аналогия с SQL запросами - select, where, group by (и прочие агрегаты).
У обработки в контексте понятная мне аналогия - это, например, window functions в SQL, скользящее среднее, интеграторы-дифференциаторы и прочие фильтры-свертки в DSP, но вот их я внятным образом с функциональщиной сопоставить не могу.
PS: клеточные автоматы и комонады: http://blog.sigfpe.com/2006/12/evaluating-cellular-automata-is.html Клеточный автомат тоже подвид фильтра поверх скользящего окна.
И функции поверх потоков: http://blog.sigfpe.com/2006/06/monads-kleisli-arrows-comonads-and.html
Вроде
![[livejournal.com profile]](https://www.dreamwidth.org/img/external/lj-userinfo.gif)
Вот например map, filter, fold - я их понял от входа, потому что очевидная аналогия с SQL запросами - select, where, group by (и прочие агрегаты).
У обработки в контексте понятная мне аналогия - это, например, window functions в SQL, скользящее среднее, интеграторы-дифференциаторы и прочие фильтры-свертки в DSP, но вот их я внятным образом с функциональщиной сопоставить не могу.
PS: клеточные автоматы и комонады: http://blog.sigfpe.com/2006/12/evaluating-cellular-automata-is.html Клеточный автомат тоже подвид фильтра поверх скользящего окна.
И функции поверх потоков: http://blog.sigfpe.com/2006/06/monads-kleisli-arrows-comonads-and.html
no subject
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
no subject
http://www.iis.sinica.edu.tw/~scm/2010/functional-pearl-maximally-dense-segments/
(no subject)
no subject
берем State - и поехали
(no subject)
no subject
В случае клеточных автоматов, это вычисление следующего состояния из предыдущего.
Любой процесс, даже Тьюринг-полное, можешь разложить на шаги.
Только в Тьюринг-полном должно стоять условие навроде "если это не ноль, продолжать".
Каждый шаг — это стрелка коалгебры.
Например, конечный автомат — (In,S)→(Out,S)
Или в коалгебраическом варианте — S→(In→(Out,S))
S может быть и пачкой клеток или клетками, объединёнными в список.
Шаг работы какого-нибудь клеточного автомата может быть записан таким типом, только к состоянию S нужно будет добавить координаты "окна".
Ну и понятно, что понятие комонадЪ'а тесно связано с коалгебрами.
Далее, в контексте взаимодействия элемента с соседями — это ж такие схемы рекурсии бывают.
Структурная реукрсия, это кото-морфизм. То есть, это вычисление алгебры alg : F x → x для любого носителя x, исходя из начальной алгебры initalg : F in → in, то есть, свёртка initalg по конкретной алгебре alg.
В простейшем случае, x бывает чем-то примитивным типа числа, в более сложном случае, это может быть тупель из многих вспомогательных типов, например, списков.
Если в x есть список, то это означает, что ты будешь 'сворачивать' initalg'ебру по твоей алгебре, используя список в качеcтве состояния.
В списке можно, например, содержать N последних значений, связанных с твоей обработкой.
Таким образом, даже и автомат с мазазинной памятью (а значит, и синтаксический разбор) может быть записан в виде кото-морфизма.
А про SQL — ну так в поцгресе давно есть WITH RECURSIVE, и в оракелё подобное совсем давно есть ;-)
Не вполне уверен, полезно ли это чем-то, но решил оставить. Зря писал, что ли?