juan_gandhi: (VP)
Juan-Carlos Gandhi ([personal profile] juan_gandhi) wrote2014-05-04 11:41 am

the essence of non-functional programming...

... is passing parameters via "common variables", imitating "environment", which they are on most occasions not.

This is unavoidable if you have functions 100 lines long; you have those variables keeping this and that... then you split the code, but you have to keep those "shared variables", so there.

They are just parameters, you know. If you think of them this way, your architecture becomes clean and clear.

[identity profile] fatoff.livejournal.com 2014-05-05 07:09 pm (UTC)(link)
Собственно конечный автомат имелся в виду. Вот робот, который потенциально может выполнить много разных инструкций (таки заранее известных), но переход к следующей инструкции зависим от контекста, в который робот был заведён предыдущими инструкциями. То есть, нужно как-то иметь persistent state.

[identity profile] badula.livejournal.com 2014-05-05 08:02 pm (UTC)(link)
persistent это который переживает выключение питания, а стейт который управляет работой автомата не обязан быть меняющимся или даже всегда одного типа. не во всех языках и типы-то есть. вход в ту или иную функцию это тоже индикация стейта. не каждая же машина - машина тьюринга, на вопрос "куда пойти теперь" можно ответить и вернув сразу функцию которая и есть это "куда".

[identity profile] fatoff.livejournal.com 2014-05-05 10:02 pm (UTC)(link)
Ну вот можешь ли ты подтвердить имплементируемость стейт-машины на чистом FP? Ведь на практике случается даже несколько стейт-машин, ответственных за разное, и отдельная машина может просто никуда не ехать, а стоять, в то время как её состояние важно, чтобы другие могли прочесть мысль.

[identity profile] ivan-gandhi.livejournal.com 2014-05-05 10:25 pm (UTC)(link)
Можно начать с вопроса, является ли лямбда-исчисление полным по Тьюрингу.

[identity profile] fatoff.livejournal.com 2014-05-05 10:26 pm (UTC)(link)
Я это не очень понимаю. Вопрос был ремесленнический.

[identity profile] ivan-gandhi.livejournal.com 2014-05-05 10:37 pm (UTC)(link)
Так я не вижу проблемы - чисто формально state machine - это функция Input -> State -> State; ты хочешь поднять эту функцию на List[Input] -> State -> State, и, может быть, поменять порядок параметров и получить State -> List[Input] -> State - и? Где проблемы? В имплементации? В книге Beautiful Code первая глава как раз посвящена тому, как, зная, что у нас речь о морфизме двух моноидов (там этих слов нет) иы можем лихо сократить вычисления, в редакторе ли, в контроле ли версий, все равно.

[identity profile] fatoff.livejournal.com 2014-05-05 10:43 pm (UTC)(link)
Ну дык, нет глобальных и статических переменных по определению? FP - это же просто высокоуровневые навороты, а под ними всё та же OS, всё те же потоки, банальная JVM. Или хранят стейт где-то не только в локальном контексте потока-функции, или нигде нет стейт, доступного другим блокам программы.

[identity profile] ivan-gandhi.livejournal.com 2014-05-05 10:47 pm (UTC)(link)
Ты и по хардверу специалист? На тему, что там под низом, есть разные мнения. Но на самом деле это неважно. Ты когда мячик кидаешь, ты о судьбе молекул вряд ли задумываешься, что за электрические силы заставляют все молекулы дружно вдруг сниматься и нестись в воздухе. Разные уровни абстракции, вот что я хочу сказать.

[identity profile] fatoff.livejournal.com 2014-05-05 10:52 pm (UTC)(link)
I wish I was... nope generalist. Поискал, вот http://doc.akka.io/docs/akka/snapshot/scala/fsm.html

Не очень внимательно пока читал, но показалось, что банальный цикл, и вуаля, имеем висящий в памяти синглтончик на Scala. :) Он отвечает на запросы. Всё как у людей.

[identity profile] badula.livejournal.com 2014-05-06 12:20 am (UTC)(link)
подтверждаю - можно :) внутри у него всё равно компьютер. ты пытаешься вместо задачи "решить задачу стейт машиной" решить задачу "написать код меняющий переменную и вызывающий функции"
на хаскеле всяких стейт машин написано два миллиона, а может и больше. скала гораздо ближе к промышленности, на ней академические задачи мало кто решает