Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 19, 2017 12:30:16

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9897
Репутация: +  855  -
Профиль   Отправить e-mail  

Задача на сумму факториалов

Rodegast
Erlang разочаровывает.
Десятки тысяч легковесных процессов, распределённые между разными компами и общающиеся друг с другом посредством аналога почтовых ящиков. Работа 24 часа в сутки 7 дней в неделю на протяжении месяцев без остановки. Интеграция с другими языками вроде C для запроса сложных вычислений. Переносимая виртуальная машина, позволяющая запускать с одинаковой эффективностью один и тот же код на абсолютно разных системах. Бесконечная рекурсия, не требующая памяти. Изменение кода выполняющейся программы без её перезапуска.

А на Haskell'е что? Удобный REPL, компиляция исходников и всё. Потому и программы сегодняшние на других языках написаны.



Отредактировано py.user.next (Апрель 19, 2017 12:34:41)

Офлайн

#2 Апрель 19, 2017 12:47:53

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2763
Репутация: +  185  -
Профиль   Отправить e-mail  

Задача на сумму факториалов

> Десятки тысяч легковесных процессов…. бла-бла-бла

Я не против Erlang-а, я просто думал что такая приметившая задача должна была решаться более простым образом.

> А на Haskell'е что? Удобный REPL, компиляция исходников и всё.

http://eax.me/cloud-haskell-vs-erlang/
http://eax.me/erlang-is-specific/



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Отредактировано Rodegast (Апрель 19, 2017 12:49:55)

Офлайн

#3 Апрель 19, 2017 13:43:48

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9897
Репутация: +  855  -
Профиль   Отправить e-mail  

Задача на сумму факториалов

Rodegast
такая приметившая задача должна была решаться более простым образом
Там просто списки вынесены в модуль и для списков определены свои операции. Суммирование - это списочное суммирование. Свёртка - это списочная свёртка. Таким образом в Erlang'е есть множество разных структур данных и для каждой определён свой набор операций. Поэтому там есть графы даже со своими операциями, в которых сразу можно узлы и рёбра делать и всё будет работать. И ещё функции там перегруженные - то есть в зависимости от количества аргументов вызывается тот или иной вариант функции для выполнения операции над заданным типом.

А в Haskell'е у тебя сумма, и как она суммирует? А другой тип ей подать, она его тоже суммировать будет? Подай ей строки, посмотрим, как она их просуммирует.
Вот такой список
["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)

Офлайн

#4 Апрель 19, 2017 15:59:57

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2763
Репутация: +  185  -
Профиль   Отправить e-mail  

Задача на сумму факториалов

> Там просто списки вынесены в модуль….операции над заданным типом.

Ты меня ничем не удивил.

> А в Haskell'е у тебя сумма, и как она суммирует?

 Prelude> :i sum
sum :: Num a => [a] -> a        -- Defined in `Data.List'
Как видишь она складывает все элементы списка если они относятся к классу типов Num

> А другой тип ей подать, она его тоже суммировать будет? Подай ей строки, посмотрим, как она их просуммирует.

Строки не относятся к классу типов Num по этому что бы sum их сконкатенировал нужно создать соответствующий экземплар класса типов:
 {-# LANGUAGE FlexibleInstances #-}
instance Num [Char] where
	(+) = (++)
	fromInteger = (\ _ -> [])
*Main> sum ["abc", "def"]
"abcdef"
Как видишь всё работает.



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Отредактировано Rodegast (Апрель 19, 2017 17:11:30)

Офлайн

#5 Апрель 19, 2017 16:45:00

4kpt_V
От: Харьков
Зарегистрирован: 2017-02-19
Сообщения: 299
Репутация: +  12  -
Профиль   Отправить e-mail  

Задача на сумму факториалов

Rodegast
И это Вы считаете читаемым кодом? Серьезно? Блин. Ну тогда я пока на питоне посижу

Офлайн

#6 Апрель 19, 2017 16:49:30

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2763
Репутация: +  185  -
Профиль   Отправить e-mail  

Задача на сумму факториалов

А в чём проблема? Если что-то не понятно спрашивай, объясню как могу.



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Офлайн

#7 Апрель 19, 2017 23:03:30

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  252  -
Профиль   Отправить e-mail  

Задача на сумму факториалов

Rodegast
И это Вы считаете читаемым кодом?
Прям как в мульфильме - крылья, ноги… главное хвост!
Что на хаскеле что на эрланге алгоритм то хуже чем самое первое что предложили… :)



Офлайн

#8 Апрель 20, 2017 01:29:11

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9897
Репутация: +  855  -
Профиль   Отправить e-mail  

Задача на сумму факториалов

Rodegast
Ты меня ничем не удивил.
Просто нет в языке этих функций, так как они слишком специфичные. А в Haskell'е что-то добавили, а оно не складывает всё, а только определённые числа какие-то. А для строк там делают concat. А для матриц что сделают? Так язык и переполняется всякой ерундой специфичной. А когда оно в модулях, язык чистым остаётся. Пример - C, у которого даже функции ввода/вывода вынесены в библиотеку были изначально, поэтому он пережил Паскаль, у которого консольный ввод/вывод был прямо в язык встроен. Поэтому сишник спокойно садится туда, где вообще консоли нет (ядро системы, в котором вообще своя функция вывода). Вот о чём речь. В питоне функция sum полиморфная, а в Haskell'е - нет, но при этом в сам язык зашита.

Rodegast
Как видишь всё работает.
Давай матрицы сложи. В питоне это легко делается, в Erlang'е для этого модуль есть. На Haskell'е должно легко реализовываться, по-твоему (модуля нет?). Но мы тут не про модуль, а про то, хорош ли Haskell на второй взгляд.

Rodegast
Строки не относятся к классу типов Num по этому что бы sum их сконкатенировал нужно создать соответствующий экземплар класса типов:
А вот что можно добавить в список в Erlang'е - всё можно добавить
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)

Офлайн

#9 Апрель 20, 2017 05:20:55

PooH
От:
Зарегистрирован: 2006-12-05
Сообщения: 1948
Репутация: +  72  -
Профиль   Отправить e-mail  

Задача на сумму факториалов

py.user.next
А в Haskell'е что-то добавили, а оно не складывает всё, а только определённые числа какие-то. А для строк там делают concat. А для матриц что сделают? Так язык и переполняется всякой ерундой специфичной.
А она и есть специфичная. От сложения ожидаешь, как минимум, коммутативности, а случае строк им и не пахнет.



Вот здесь один из первых отарков съел лаборанта. Это был такой умный отарк, что понимал даже теорию относительности. Он разговаривал с лаборантом, а потом бросился на него и загрыз…

Офлайн

#10 Апрель 20, 2017 08:28:47

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9897
Репутация: +  855  -
Профиль   Отправить e-mail  

Задача на сумму факториалов

PooH
От сложения ожидаешь, как минимум, коммутативности
  
>>> 'a' + 'b'
'ab'
>>> 'a' + 'b' == 'b' + 'a'
False
>>>
То, что операция сложения коммутативна, само по себе является частным случаем операции. Операция разности, например, не коммутативна. А на множестве матриц операция умножения не коммутативна.



Отредактировано py.user.next (Апрель 20, 2017 08:31:52)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version