metaclass: (Default)
[personal profile] metaclass
А вот, тащемта, можно ли и каким образом на хаскеле можно сделать обобщенную функцию такого вида:

На вход подается список функций разных типов, но общей структуры вроде такой:
f :: state -> input -> (new_state,output) (такая функция описывает блок обработки сигналов, с внутренним состоянием, типа фильтра).

На выходе наша обобщенная функция должна выдать нечто такое:
f_all :: state_all -> input_all -> (new_state_all,output_all), где state_all,input_all,output_all - объединение (кортеж) соответственно из всех состояний, входов и выходов переданных на вход функций. То бишь наша функция, из N блоков обработки сигналов делает 1 блок, входы которого - это входы всех составляющих блоков, выходы - выходы составляющих блоков и состояние аналогично.

На кложури с ее макросами и отсутствием строгой системы типов такое делается практически в лоб, за исключением необходимости описывать функции блоков в виде, доступном для преобразования (то ли через рефлекшн, то ли макрос, который опишет функцию с метаданными, то ли есть что-то встроенное). Единственный не совсем ясный вопрос - тип возвращаемого значения из кложурной функции не особо то и узнаешь.

Далее там еще есть необходимость сгенерировать описание соединений (т.е. функция, которая из state_all и части свободных входов генерирует input_all), но над этим пока думать влом)

PS: в общем, забавность ситуации в том, что строгая типизация помогла бы находить ошибки в блоках и соединениях, но с ней возникает необходимость использовать гетерогенные списки, SYB и прочую олеговщину. Причем я в это утыкаюсь регулярно - то с оперденями, то вот сейчас с обработкой сигналов.

Date: 2012-05-19 01:50 pm (UTC)
From: [identity profile] metaclass.livejournal.com
Тащемта, пока кложурь для этой задачи выглядит нагляднее, причем даже без макросов.
С хаскелем непонятно. Странные многоуровневые туплы на выходе гетерогенных списков напрягают.

Date: 2012-05-19 01:55 pm (UTC)
From: [identity profile] yantayga.livejournal.com
Так и без туплов можно ж...

Date: 2012-05-19 01:57 pm (UTC)
From: [identity profile] yantayga.livejournal.com
А может скорее тут нужно не пытаться решать эту задачу на Хаскеле "в лоб", а как то переформулировать? Учитывая ее корни и т. п., чтоб там вообще не возникало разнотиповых функций, например. Посмотреть какие ограничения еще могут присутствовать на условия, а не пытаться объять необъятное.
Edited Date: 2012-05-19 01:59 pm (UTC)

Date: 2012-05-19 02:03 pm (UTC)
From: [identity profile] metaclass.livejournal.com
Надо подумать, да.
А то я по пути наименьшего сопротивления пока использую Clojure, но очень уж интересно эти задачи в строгой типизации и ленивости оформить. Правда, скажем, с ком-портом на хаскеле получилась ересь - либо tight-coupling (т.е. логика и обмен с внешним миром никак не разделены) либо адовы iteratees и аттопарсеки с багами.

Date: 2012-05-19 02:40 pm (UTC)
From: [identity profile] isorecursive.livejournal.com
"Многоуровневость" тупла - это и есть отраженная в типах гетерогенность.

Date: 2012-05-19 02:42 pm (UTC)
From: [identity profile] theiced.livejournal.com
ну так и не взрывай моск. а то разведёшься, переедешь к родителям и будешь устраивать митинги для открытия азбуки вкуса пососедству.

Date: 2012-05-20 01:35 am (UTC)

Profile

metaclass: (Default)
metaclass

April 2017

S M T W T F S
      1
2345678
9101112 131415
16171819202122
23242526272829
30      

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Nov. 3rd, 2025 02:39 pm
Powered by Dreamwidth Studios