metaclass: (Default)
[personal profile] metaclass
haskell datagrid

ocaml datagrid

Обратите внимание на количество найденных ссылок. И попытаться найти хотя бы одну из них которая соответствует искомому.

Я, конечно, понимаю, что заниматься мерянием производительности алгоритмов и разработкой сложной back-end логики это гораздо интереснее, чем делать GUI, но GUI тоже таки делать нужно.
У меня вот в последней сложной фиче, которую я делал, на back-end логику ушло пару дней, на ввод данных для нее - неделя и еще две недели на подгонку GUI чтобы это все было можно использовать как можно удобнее и быстрее.

Date: 2009-07-11 10:02 am (UTC)
From: [identity profile] kurilka.livejournal.com
F# же потомок ML?
Или речь о чём-то ином?

Date: 2009-07-11 10:21 am (UTC)
From: [identity profile] aamonster.livejournal.com
Да, границу и правда трудно провести =).
Хотя я, скорее, имел в виду постепенное добавление декларативных средств в C# - вон, и лямбды уже есть, и еще какие-то радости.
(deleted comment)

Date: 2009-07-11 12:12 pm (UTC)
From: [identity profile] metaclass.livejournal.com
Готового работающего нет.

Но в ту сторону я полез именно за тем, чтобы придумать способ описания этого конечного автомата с участием пользователя, т.к. в FP как раз это все более математизировано, чем в привычных языках программирования.

Date: 2009-07-11 12:26 pm (UTC)
From: [identity profile] metaclass.livejournal.com
Готового работающего нет.

Но в ту сторону я полез именно за тем, чтобы придумать способ описания этого конечного автомата с участием пользователя, т.к. в FP как раз это все более математизировано, чем в привычных языках программирования.

Date: 2009-07-11 03:50 pm (UTC)
From: [identity profile] kkirsanov.livejournal.com
--конечного автомата с участием пользователя, <...> FP как раз это все более математизировано

В умных книжках пишут что ФП и автоматы - две вещи несовместные, т.к. у автоматов состояния есть, а в ФП их быть не должно.

Date: 2009-07-11 05:16 pm (UTC)
From: [identity profile] kurilka.livejournal.com
можно ссылки на эти "умные книжки"?
Монады State и gen_fsm в эрланге, наверное, не существует?

Date: 2009-07-11 07:14 pm (UTC)
From: [identity profile] kkirsanov.livejournal.com
--можно ссылки на эти "умные книжки"?
Боюсь что уже не упомню. Помню что по-английски было.

Обосновывлось так: если у вас сплошные состояния то это уже к товарищу Тюрингу и всякой императивщине, всяческими костылями конечно запихнуть в ФП можно, но зачем?

--Монады State и gen_fsm в эрланге, наверное, не существует?
Конечно существуют.

Date: 2009-07-11 07:34 pm (UTC)
From: [identity profile] kurilka.livejournal.com
Я правильно понимаю, что эквивалентность лямбда исчисления и машины Тьюринга для вас пустой звук?
Про костыли интересен более полный ответ - что вы ими считаете и почему?

Date: 2009-07-11 09:10 pm (UTC)
From: [identity profile] kkirsanov.livejournal.com
--Я правильно понимаю, что эквивалентность лямбда исчисления и машины Тьюринга для вас пустой звук?
Неправильно.

--Про костыли интересен более полный ответ - что вы ими считаете и почему?
Деалю системы управления для мобильных роботов.
Ради интереса попробовал на хаскеле.
Получилась куча монад и почти императивно.

Date: 2009-07-11 09:32 pm (UTC)
From: [identity profile] kurilka.livejournal.com
Есть подозрение, что простая смена языка на функциональный не приводит перестройке подхода к проектированию с императивного на подход, базирующийся на функциональной композиции/декомпозиции.
Скепсис вещь хорошая, но по-моему лучше, когда он достаточно аргументирован.

Date: 2009-07-11 10:41 pm (UTC)
From: [identity profile] metaclass.livejournal.com
Кстати, насчет эквивалентности. Я не очень понимаю операционную семантику лямбда-исчисления. Если построить машину Тьюринга в железе и запрограмировать примерно понятно как, то как построить считалку на лямбдах - не очень :)

Date: 2009-07-12 06:27 am (UTC)
From: [identity profile] kurilka.livejournal.com
Как варианты - http://en.wikipedia.org/wiki/SECD http://en.wikipedia.org/wiki/Categorical_abstract_machine (оно же CAM из CAML), в хаскеле вроде G-machine (пока руки не дошли толком разобраться, у Simon Peyton Jones в книжках разбирается вроде как), у клина - ABC-machine, http://www.st.cs.ru.nl/papers/1993/plaseek93/Ch10.ABC.ps
По сути там переписывание графов, хотя не сказал бы что хорошо разбираюсь в теме.

Date: 2009-07-12 06:34 am (UTC)
From: [identity profile] metaclass.livejournal.com
Про G-машину я у SPJ читал, но только самую краткую часть, где они описывают, как это все прикручивают к обычному железу. А основные длинные книги осилить никак не могу - с экрана тяжело читать.
Но тут проблема в другом. Машина тьюринга от современных процов и языков программирования отличается очень сильно, хотя я примерно представляю, как можно ее преобразовать до проца с простейшим набором действий.
А вот для лямбда-исчисления я затрудняюсь такую же последовательность представить, а во всех практических реализациях ФП используют уже готовые команды существующих процессоров или языков низкого уровня на которых это реализовано. Т.е. формально, операцию сложения можно описать в нумералах черча, но никто ж этого делать практически не станет, а вместо этого используют операции от обычных процессоров, которые сами по себе ближе к тьюрингу, чем к лямбдам.

(no subject)

From: [identity profile] kurilka.livejournal.com - Date: 2009-07-12 06:47 am (UTC) - Expand

(no subject)

From: [identity profile] metaclass.livejournal.com - Date: 2009-07-12 06:54 am (UTC) - Expand

(no subject)

From: [identity profile] kurilka.livejournal.com - Date: 2009-07-12 07:01 am (UTC) - Expand

Date: 2009-07-11 06:41 pm (UTC)
From: [identity profile] gds.livejournal.com
а если передам?

Date: 2009-07-11 10:38 pm (UTC)
From: [identity profile] metaclass.livejournal.com
Да совместимо оно, только что состояния в монадах таскаются.

Date: 2009-07-12 02:47 am (UTC)
From: [identity profile] dmzlj.livejournal.com
Да не факт что должно что-то вообще таскаться в монадах - зависит от конкретной ситуации. То, что fsm и ФП несовместимы - это просто какая-то глупость, в общем случае.

Date: 2009-07-12 06:49 am (UTC)
From: [identity profile] kurilka.livejournal.com
не обязательно в монадах, можно и явной передачей (см. Erlang/Clean)

Date: 2009-07-12 06:55 am (UTC)
From: [identity profile] metaclass.livejournal.com
Явная передача это реализация монад вручную в итоге получится.

Date: 2009-07-12 06:58 am (UTC)
From: [identity profile] kurilka.livejournal.com
Я бы сказал наоборот - невыделение монад в отдельную сущность, в отличие от хаскеля где есть шанс отделить мух от котлет.

Date: 2009-07-12 02:38 am (UTC)
From: [identity profile] dmzlj.livejournal.com

Это какие-то неправильные умные книжки. Или вы их как-то неправильно поняли. Вот, например, конечный автомат на два состояния - Пыщь и Адын:

open ExtString

type state = Pysh | Adyn 

let fsm evt =
    let input state x = match state, x with
    | Pysh, '{' -> Adyn
    | Pysh, ' ' -> Pysh 
    | Pysh, c   -> Printf.printf "Pysh! %c\n" c; Pysh
    | Adyn, '}' -> Pysh
    | Adyn, ' ' -> Adyn
    | Adyn, c   -> Printf.printf "Adyn! %c\n" c; Adyn 

    in List.fold_left input Pysh (String.explode evt)

let _ = 
    fsm "000000000 { 1111111111111111111 } 2222222222222222222"

никакие монады для его реализации не понадобились, и за исключением побочного эффекта печатания - вполне функционально. Стейт, заметим, есть, но при этом все остается в рамках концепции.

заметим еще, что сделать такой автомат на императивном языке "где есть состояния" c++ - будет несколько более громоздко.

Date: 2009-07-12 10:49 am (UTC)
From: [identity profile] kkirsanov.livejournal.com
--Или вы их как-то неправильно поняли.
Всякое бывает

Date: 2009-07-12 10:57 am (UTC)
From: [identity profile] kkirsanov.livejournal.com
Кстати, а не подскажите какой-нибудь сайтик с типичными задачами на хасскеле, вроде этой?
Что бы, так сказать, на живых примерах учиться.

Date: 2009-07-12 11:05 am (UTC)
From: [identity profile] dmzlj.livejournal.com
Ну, это был окамл, но для хаскелла могу порекомендовать сайты

http://learnyouahaskell.com/ и http://book.realworldhaskell.org/read/

не то, что бы там были типичные задачи, но какие-то задачи в процессе изучения языка разбираются.


По поводу задач лично мне понравился курс вот этого вот товарища: http://andrej.com/plzoo/
по написанию трансляторов языков. Много маленьких примеров имплементация языков программирования на ocaml

Date: 2009-07-27 12:43 pm (UTC)
nine_k: A stream of colors expanding from brain (Default)
From: [personal profile] nine_k
Лет 10 назад мне доводилось как раз делать гирлянды окон с формами, традиционный "толстый клиент" такой. Очень тянуло написать state machine для всего этого, просится же.

Но не написал. Потому что, как посмотришь, так выходит, что граф состояний довольно сильно связен, все ветки описывать прямолинейно — некомпактно выходит, описывать "в общем виде" — приходим примерно к тому, от чего ушли. А уж если втащить туда влияние всяких опций (то показывать, это не показывать, вон то работает в зависимости от настроек), то и вообще граф расползается ужасно. В результате остановился на кусочках state machine (переход между состояниями делает enable-disable наборам команд, как в turbovision) и описанию логики "в свободной форме" в остальном.

Потом я перелез на веб-интерфейсы. А там вообще практически полносвязный граф: юзер может и url любой из закладок достать, и кнопки back и forward понажимать. Там как-то проще с концепцией состояния сессии.

В общем, КА как язык описания хорош для протоколов связи и, пожалуй, "узких" UI, типа кассового аппарата. А для "обычных" UI — сомневаюсь.

Для UI, в особенности web, мне кажется более интересным использование continuations (seaside, weblocks, wee, etc). Там, как мне кажется (я не пробовал, только читал описания) код действительно получается более компактным и прямолинейным. Какие там подводные камни, не знаю.

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 Jun. 7th, 2025 06:44 pm
Powered by Dreamwidth Studios