
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[216.73.216.3] |
![]() |
|
Страницы: (21) « Первая ... 13 14 [15] 16 17 ... 20 21 ( Перейти к последнему сообщению ) |
Сообщ.
#211
,
|
|
|
Чем вообще хорош эликсир, кстати говоря? Сахару в нем много, но есть что-то что действительно упрощает жизнь, а не просто слегка сокращает код? |
Сообщ.
#212
,
|
|
|
Цитата applegame @ Вот do-нотация и превращает список операций в кучу функций, результаты которых являются аргументами других функций, результаты которых являются аргументами других функций... Все это является одним из видов монад Не так. do-нотация это сахар над монадами. Т.е. она применима к любым видам монад. |
![]() |
Сообщ.
#213
,
|
|
Астарот, например:
![]() ![]() doSomething() .then(result => doSomethingElse(result)) .then(newResult => doThirdThing(newResult)) .then(finalResult => { console.log(`Got the final result: ${finalResult}`); }) — https://developer.mozilla.org/en-US/docs/We.../Using_promises ![]() ![]() do result <- doSomething newResult <- doSomethingElse result finalResult <- doThirdThing newResult putStrLn $ "Got the final result: " ++ finalResult |
Сообщ.
#214
,
|
|
|
Выглядит, как те же яйца, просто в профиль. А киллер-фича какая-нибудь есть? За пример спасибо
![]() |
Сообщ.
#215
,
|
|
|
Сообщ.
#216
,
|
|
|
Цитата Астарот @ Уши эрланга торчат из эликсира повсеместно. Из того что упрощает жизнь: метапрограммирование, адекватный синтаксис, более вменяемая стандартная либа. Меня лично еще напрягает в эрланге невозможность ребиндить переменные. Чем вообще хорош эликсир, кстати говоря? Сахару в нем много, но есть что-то что действительно упрощает жизнь, а не просто слегка сокращает код? |
Сообщ.
#217
,
|
|
|
ООП - прекрасный инструмент в соответствующих условиях и ... руках. Ну все же отлично понимают, что это не панацея?! Если речь идет, к примеру, о программировании какой-либо логической матрицы с 256 выходами и 1024 состояниями (ну очень разреженная матрица), разумнее просто исполнить CASE вариант алгоритма?
|
Сообщ.
#218
,
|
|
|
Цитата JoeUser @ Не уверен, что понял, что ты имеешь в виду под понятием "логическая матрица" (я привык, что под этим понимают микросхему, физически реализующую ДНФ, да, матрицы соединений там как правило очень разреженные). Но ещё более непонятно, каким боком к ним ООП.Если речь идет, к примеру, о программировании какой-либо логической матрицы с 256 выходами и 1024 состояниями Но должен заметить, что ООП прекрасно укладывается в концепцию CASE-систем. |
Сообщ.
#219
,
|
|
|
JoeUser, а ты как определяешь ООП?
|
![]() |
Сообщ.
#220
,
|
|
Цитата Астарот @ Выглядит, как те же яйца, просто в профиль. А это и есть те же яйца. Только в статике. Цитата Астарот @ А киллер-фича какая-нибудь есть? Какая киллер-фича у интерфейса Collection? Или у интерфейса Iterable? Цитата Астарот @ Хаскель это просто и понятно, говорили они А что тут сложного? =) Моноид — это тройка: – множество – бинарная ассоциативная операция над элементами этого множества и возвращающая в качестве результата элемент этого же множества – нейтральный элемент по отношению к это операции Пример 1: – Целые числа – (+) – 0 Пример 2: – Целые числа – (*) – 1 Пример 3: – Строки – конкатенация – пустая строка Пример 4: ![]() ![]() data OrderStat = OS { quantity :: Int, totalCost :: Double } instance Monoid OrderStat where mempty = OS 0 0.0 mappend (OS q1 tc1) (OS q2 tc2) = OS (q1 + q2) (tc1 + tc2) Моноиды удобны для свёрток (в т.ч. параллельных) Функтор — это, упрощённо, отображение одного множества на другое. Эндофунктор — это функтор, который отображает множество на само себя. Например тип Список является функтором, отображением — функция map (или её "функторный" вариант: fmap): ![]() ![]() class Functor f where fmap :: (a -> b) -> f a -> f b instance Functor [] where fmap f xs = map f xs Т.е. можно считать, что эндофунктор — это такой контейнерный тип, у которого есть операция map, применяющая к содержимому контейнера некоторую операцию, но сохраняющая сам контейнер. Моноид в категории эндофункторов: – множество функций m a -> m b – композиция функций bind :: (m a -> m b) -> (m b -> m c) -> (m a -> m c) – функция id :: a -> a (id x = x) — нейтральный элемент |
Сообщ.
#221
,
|
|
|
Цитата korvin @ А что тут сложного? =) Держите наркомана! ![]() Цитата korvin @ Т.е. можно считать, что эндофунктор — это такой контейнерный тип, у которого есть операция map, применяющаяся к содержимому контейнера некоторую операцию, но сохраняющая сам контейнер. Во! Можно же понятным языком ![]() Там народ угорел, вроде бы даже на фронтенд хаскель тянут. Ну, чисто культ карго, как по мне... Добавлено Цитата korvin @ Какая киллер-фича у интерфейса Collection? Или у интерфейса Iterable? Я спрашивал про киллер-фичу Эликсира против Эрланга. Ну, типа Котлин против Джавы. У Котлина есть парочка фич тянущих на киллер, типа функций-расширений, корутин и делегатов. Думал может у Эликсира что-то такое найдется. |
![]() |
Сообщ.
#222
,
|
|
Цитата Астарот @ Я спрашивал про киллер-фичу Эликсира против Эрланга. А. Но это шло в твоём же ответе про do-нотацию, как можно было понять, что вопрос про Эликсир? Добавлено Цитата Астарот @ Там народ угорел, вроде бы даже на фронтенд хаскель тянут. Ну, чисто культ карго, как по мне... Как и JS на бэкенде… =) |
![]() |
Сообщ.
#223
,
|
|
Цитата korvin @ Ты сейчас процитировал определение абелевой группы. Почти, про обратный элемент промолчал. Моноид — это тройка: – множество – бинарная ассоциативная операция над элементами этого множества и возвращающая в качестве результата элемент этого же множества – нейтральный элемент по отношению к это операции Добавлено А, не, не обязательно абелевой. |
Сообщ.
#224
,
|
|
|
Qraizer, моноиды - это понятие из математики, если что.
|
Сообщ.
#225
,
|
|
|
Цитата amk @ Но ещё более непонятно, каким боком к ним ООП. Классическая программа осуществляет свое функционирование путем вычислений и переходов, зашитых в программном коде исполняемого файла. По большому счету можно описать вектор N-обработчиков в виде указателей на функции и логическую M-матрицу (матрицу переходов), которую можно грузить как данные. И вся эта кухня будет работать гораздо быстрее реализации в виде ООП. Но только для своей ниши!!! Где данных относительно мало, а алгоритм последовательности их обработки достаточно сложен. Некое недалекое подобие шитого кода. Цитата D_KEY @ JoeUser, а ты как определяешь ООП? Если речь идет о "программировании", то тут классика: - Инкапсуляция - Наследование - Полиморфизм Если речь идет о "проектировании", то понятие ... самоопределимое ![]() |