tag:blogger.com,1999:blog-8641042312683198534.post2348427458154278646..comments2017-08-19T20:36:51.159+03:00Comments on Давид Сорокин: О вычислительных выраженияхdsorokinhttp://www.blogger.com/profile/12343205630861084400noreply@blogger.comBlogger7125tag:blogger.com,1999:blog-8641042312683198534.post-43750937991177122472010-09-13T08:56:31.422+04:002010-09-13T08:56:31.422+04:00@alexey-rom
Я и надеюсь на такой плагин :) Уж оче...@alexey-rom<br /><br />Я и надеюсь на такой плагин :) Уж очень удобны эти выражения, например, как генераторы ленивой последовательности (моноид seq).dsorokinhttps://www.blogger.com/profile/12343205630861084400noreply@blogger.comtag:blogger.com,1999:blog-8641042312683198534.post-39794273966450271612010-09-13T08:46:17.007+04:002010-09-13T08:46:17.007+04:00Да, очень близко к нотации do. В одном ряду с for-...Да, очень близко к нотации do. В одном ряду с for-comprehension из Скалы и Linq из C#.dsorokinhttps://www.blogger.com/profile/12343205630861084400noreply@blogger.comtag:blogger.com,1999:blog-8641042312683198534.post-34436764490950953432010-09-12T21:59:48.107+04:002010-09-12T21:59:48.107+04:00Я правильно понял что это вариация на тему хаскель...Я правильно понял что это вариация на тему хаскельной do-нотации?Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-8641042312683198534.post-57596073000544662052010-09-12T21:45:34.939+04:002010-09-12T21:45:34.939+04:00> Скаловский for-comprehension смотрится как-то...> Скаловский for-comprehension смотрится как-то слабо, особенно для императивных монад, когда вычисления нужно разбавить обычным кодом.<br /><br />Да. Нужно бы подумать, можно ли написать соответствующий плагин для компилятора.Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-8641042312683198534.post-19227086896005409652010-09-12T18:24:15.175+04:002010-09-12T18:24:15.175+04:00Еще до кучи. Считывается граф из XML с помощью ста...Еще до кучи. Считывается граф из XML с помощью стандартного парсера XmlReader. Как и раньше, let! - это монадический bind. Опять же, все вычислительное выражение xmlreader {...} преобразуется в композицию функций.<br /> <br /><------<br />static let read =<br /> XmlReader.elem "graph" <| xmlreader {<br /> <br /> let! id = XmlReader.attr "guid"<br /> let! (nodes, rels) = readContents<br /> <br /> let graph = Graph (id)<br /> graph.Nodes.AddGraph (nodes, rels)<br /> <br /> return graph<br />}<br />------>dsorokinhttps://www.blogger.com/profile/12343205630861084400noreply@blogger.comtag:blogger.com,1999:blog-8641042312683198534.post-75102146101468781392010-09-12T16:36:21.342+04:002010-09-12T16:36:21.342+04:00Только F# :)
Вот, пример с асинхронными вычислен...Только F# :) <br /><br />Вот, пример с асинхронными вычислениями. Периодически посылает сообщение SaveModels. Кусок с do! - это асинхронное подвычисление (асинхронное усыпление системного потока, т.е. без фактического простаивания).<br /><br /><------<br />let saver = async {<br /> <br /> if server.SavingPeriod > 0 then<br /> <br /> while true do<br /> <br /> do! Async.Sleep server.SavingPeriod<br /> agent.Post SaveModels<br />}<br /><br />do! Async.StartChild saver |> Async.Ignore<br />------><br /><br />А это имитационная [законченная] модель станка. Вычисление Hold удерживает текущий поток исполнения имитационного процесса в течение заданного времени. <br /><br /><------<br />type Machine (e, id) =<br /><br /> inherit Process (e)<br /><br /> override x.Activate = dynamicscont {<br /> while true do<br /> let! startUpTime = DynamicsCont.lift time<br /> let upTime = expovariate upRate<br /> do! x.Hold (upTime)<br /> let! finishUpTime = DynamicsCont.lift time<br /> totalUpTime <- totalUpTime + <br /> (finishUpTime - startUpTime)<br /> let repairTime = expovariate repairRate<br /> do! x.Hold (repairTime)<br /> }<br />------><br /><br />В обоих случаях код async {...} и dynamicscont {...} со всеми while, let! и do! преобразуется компилятором в композиции функций. let! - это монадический bind. do! - специализированная версия let! для типа unit.dsorokinhttps://www.blogger.com/profile/12343205630861084400noreply@blogger.comtag:blogger.com,1999:blog-8641042312683198534.post-81908187518642360062010-09-12T16:05:08.902+04:002010-09-12T16:05:08.902+04:00а можно маленький пример использования? если есть ...а можно маленький пример использования? если есть возможность, то на лиспе. нет - на чём угодно.Alkhimovhttps://www.blogger.com/profile/09524061013883637393noreply@blogger.com