Форум сайта python.su
RodegastДесятки тысяч легковесных процессов, распределённые между разными компами и общающиеся друг с другом посредством аналога почтовых ящиков. Работа 24 часа в сутки 7 дней в неделю на протяжении месяцев без остановки. Интеграция с другими языками вроде C для запроса сложных вычислений. Переносимая виртуальная машина, позволяющая запускать с одинаковой эффективностью один и тот же код на абсолютно разных системах. Бесконечная рекурсия, не требующая памяти. Изменение кода выполняющейся программы без её перезапуска.
Erlang разочаровывает.
Отредактировано py.user.next (Апрель 19, 2017 12:34:41)
Офлайн
> Десятки тысяч легковесных процессов…. бла-бла-бла
Я не против Erlang-а, я просто думал что такая приметившая задача должна была решаться более простым образом.
> А на Haskell'е что? Удобный REPL, компиляция исходников и всё.
http://eax.me/cloud-haskell-vs-erlang/
http://eax.me/erlang-is-specific/
Отредактировано Rodegast (Апрель 19, 2017 12:49:55)
Офлайн
RodegastТам просто списки вынесены в модуль и для списков определены свои операции. Суммирование - это списочное суммирование. Свёртка - это списочная свёртка. Таким образом в Erlang'е есть множество разных структур данных и для каждой определён свой набор операций. Поэтому там есть графы даже со своими операциями, в которых сразу можно узлы и рёбра делать и всё будет работать. И ещё функции там перегруженные - то есть в зависимости от количества аргументов вызывается тот или иной вариант функции для выполнения операции над заданным типом.
такая приметившая задача должна была решаться более простым образом
["abc", "def"]
Eshell V5.10.4 (abort with ^G)
1> l(string).
{module,string}
2> ["abc", "def"].
["abc","def"]
3> string:join(["abc", "def"], []).
"abcdef"
4>
Eshell V5.10.4 (abort with ^G)
1> lists:concat(["abc", "def"]).
"abcdef"
2>
Eshell V5.10.4 (abort with ^G)
1> lists:merge(["abc", "def"]).
"abcdef"
2>
Eshell V5.10.4 (abort with ^G)
1> lists:foldr(fun erlang:'++'/2, [], ["abc", "def"]).
"abcdef"
2>
Eshell V5.10.4 (abort with ^G)
1> lists:concat(["abc", 12345, "def", 6789, 'alpha centavra']).
"abc12345def6789alpha centavra"
2>
Отредактировано py.user.next (Апрель 19, 2017 14:09:09)
Офлайн
> Там просто списки вынесены в модуль….операции над заданным типом.
Ты меня ничем не удивил.
> А в Haskell'е у тебя сумма, и как она суммирует?
Prelude> :i sum sum :: Num a => [a] -> a -- Defined in `Data.List'
{-# LANGUAGE FlexibleInstances #-} instance Num [Char] where (+) = (++) fromInteger = (\ _ -> []) *Main> sum ["abc", "def"] "abcdef"
Отредактировано Rodegast (Апрель 19, 2017 17:11:30)
Офлайн
Rodegast
И это Вы считаете читаемым кодом? Серьезно? Блин. Ну тогда я пока на питоне посижу
Офлайн
А в чём проблема? Если что-то не понятно спрашивай, объясню как могу.
Офлайн
RodegastПрям как в мульфильме - крылья, ноги… главное хвост!
И это Вы считаете читаемым кодом?
Офлайн
RodegastПросто нет в языке этих функций, так как они слишком специфичные. А в Haskell'е что-то добавили, а оно не складывает всё, а только определённые числа какие-то. А для строк там делают concat. А для матриц что сделают? Так язык и переполняется всякой ерундой специфичной. А когда оно в модулях, язык чистым остаётся. Пример - C, у которого даже функции ввода/вывода вынесены в библиотеку были изначально, поэтому он пережил Паскаль, у которого консольный ввод/вывод был прямо в язык встроен. Поэтому сишник спокойно садится туда, где вообще консоли нет (ядро системы, в котором вообще своя функция вывода). Вот о чём речь. В питоне функция sum полиморфная, а в Haskell'е - нет, но при этом в сам язык зашита.
Ты меня ничем не удивил.
RodegastДавай матрицы сложи. В питоне это легко делается, в Erlang'е для этого модуль есть. На Haskell'е должно легко реализовываться, по-твоему (модуля нет?). Но мы тут не про модуль, а про то, хорош ли Haskell на второй взгляд.
Как видишь всё работает.
RodegastА вот что можно добавить в список в Erlang'е - всё можно добавить
Строки не относятся к классу типов Num по этому что бы sum их сконкатенировал нужно создать соответствующий экземплар класса типов:
Eshell V5.10.4 (abort with ^G)
1> [1, "a", {jimbo, [true,false], {yes, no}}, 'a b c d'].
[1,"a",{jimbo,[true,false],{yes,no}},'a b c d']
2>
Отредактировано py.user.next (Апрель 20, 2017 01:31:43)
Офлайн
py.user.nextА она и есть специфичная. От сложения ожидаешь, как минимум, коммутативности, а случае строк им и не пахнет.
А в Haskell'е что-то добавили, а оно не складывает всё, а только определённые числа какие-то. А для строк там делают concat. А для матриц что сделают? Так язык и переполняется всякой ерундой специфичной.
Офлайн
PooH
От сложения ожидаешь, как минимум, коммутативности
>>> 'a' + 'b' 'ab' >>> 'a' + 'b' == 'b' + 'a' False >>>
Отредактировано py.user.next (Апрель 20, 2017 08:31:52)
Офлайн