Найти - Пользователи
Полная версия: Задача на сумму факториалов
Начало » Центр помощи » Задача на сумму факториалов
1 2 3 4
Rodegast
> А когда оно в модулях, язык чистым остаётся.

Ты наверное не в курсе но в Haskell-е есть модули. Более того тот же sum находится в модуле Prelude который подгружается автоматически.

> В питоне функция sum полиморфная, а в Haskell'е - нет, но при этом в сам язык зашита.

До тебя может быть не дошло, но в предыдущем своём сообщении я продемонстрировал полиморфизм этой функции.

> Давай матрицы сложи. … На Haskell'е должно легко реализовываться, по-твоему (модуля нет?).

Успокойся. Есть там такой модуль http://hackage.haskell.org/package/matrix-0.3.5.0/docs/Data-Matrix.html
py.user.next
Rodegast
я продемонстрировал полиморфизм этой функции.
Так ты в консоли продемонстрируй, а то стал файл создавать. В питоне вот ничего создавать не надо. Прямо в консоли (в REPL'е) сделай такую sum.

Rodegast
Ты наверное не в курсе но в Haskell-е есть модули. Более того тот же sum находится в модуле Prelude который подгружается автоматически.
Ну, и почему ты не подгрузил уже готовую sum для строк? Почему тебе пришлось новый код какой-то писать? Да она вообще должна их складывать сразу в соответствии с легендой об удобстве Haskell'а! А для матриц тоже писать будешь?

Видишь, пока были числа, sum работала, а как только условия немного изменились, ты бросился писать код. Я же ничего не писал, просто подгрузил готовое. В реальной жизни от того, что у тебя есть, а что тебе надо написать, зависит вообще разработка проекта - как скорость, так и мотивация. Поэтому и на питоне легче делать программу, чем на C. Пока на C будешь писать один вспомогательный модуль, на питоне уже будет готова вся программа.

А вот ты можешь матрицы из модуля загнать в список на Haskell сходу?
Rodegast
В реальной жизни никто sum для конкатенации списков не использует. Для этого есть обычная свёртка:
 Prelude> foldr1 (++) ["abc", "def"]
"abcdef"
py.user.next
Rodegast
В реальной жизни никто sum для конкатенации списков не использует. Для этого есть обычная свёртка:
Там не свёртка есть, а concat. Просто речь именно о применимости sum без лишних телодвижений, как в питоне сделано. Строки ты не сложишь, но переопределить магический метод можно у любого объекта, получая эффект от sum.

  
>>> class A:
...     def __init__(self, n):
...         self.n = n
...     def __add__(self, v):
...         return '{} plus {!s}'.format(self.n, v)
...     def __radd__(self, v):
...         return '{!s} plus {}'.format(v, self.n)
...     def __str__(self):
...         return str(self.n)
... 
>>> A('x') + A('y') + A('z')
'x plus y plus z'
>>> 
>>> sum([A('y'), A('z')], A('x'))
'x plus y plus z'
>>>
Rodegast
> Там не свёртка есть, а concat.

Я обычно свёрткой пользуюсь ибо она более универсальна.

> Просто речь именно о применимости sum без лишних телодвижений, как в питоне сделано.

Вот. А теперь сравни всё это с тем что я на haskell-е написал.
py.user.next
Rodegast
А теперь сравни всё это с тем что я на haskell-е написал.
Вот я и жду, когда же ты сделаешь
sum [matrix1, matrix2]
Rodegast
Зачем ждать? Ссылку на документацию по матричному модулю я тебе дал, как объяснить sum-у что с матрицами делать тоже написано. Я надеюсь что ты дальше без моей помощи сможешь справиться.
py.user.next
Rodegast
Я надеюсь что ты дальше без моей помощи сможешь справиться.
Был бы он удобный, ты бы уже набросал. Вот оно удобство. В Erlang'е просто берёшь и пользуешься и умеет он то, что уметь как бы не должен изначально, по идее. А в Haskell'е вроде всё красиво и должно работать, а нужно всё равно что-то доделывать, дописывать. И списки тут только из однотипных элементов должны быть (хотя почему?).
Rodegast
> Был бы он удобный, ты бы уже набросал….доделывать, дописывать

Вот только демагогии не надо

> И списки тут только из однотипных элементов должны быть (хотя почему?).

Потому что статическая типизация. Если нужны разные типы то пользуются картежами.
Rodegast
Кстати вот ещё один модуль для работы с матрицами http://dis.um.es/~alberto/hmatrix/hmatrix.html там сделано всё как ты хочешь:
 Prelude> import Numeric.LinearAlgebra
Prelude Numeric.LinearAlgebra> let a = (2><2)  [ 2, 2, 2, 2 ]
Prelude Numeric.LinearAlgebra> let b = (2><2)  [ 3, 3, 3, 3 ]
Prelude Numeric.LinearAlgebra> sum [a,b]
(2><2)
 [ 5.0, 5.0
 , 5.0, 5.0 ]
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB