Форум сайта python.su
> А когда оно в модулях, язык чистым остаётся.
Ты наверное не в курсе но в Haskell-е есть модули. Более того тот же sum находится в модуле Prelude который подгружается автоматически.
> В питоне функция sum полиморфная, а в Haskell'е - нет, но при этом в сам язык зашита.
До тебя может быть не дошло, но в предыдущем своём сообщении я продемонстрировал полиморфизм этой функции.
> Давай матрицы сложи. … На Haskell'е должно легко реализовываться, по-твоему (модуля нет?).
Успокойся. Есть там такой модуль http://hackage.haskell.org/package/matrix-0.3.5.0/docs/Data-Matrix.html
Офлайн
RodegastТак ты в консоли продемонстрируй, а то стал файл создавать. В питоне вот ничего создавать не надо. Прямо в консоли (в REPL'е) сделай такую sum.
я продемонстрировал полиморфизм этой функции.
RodegastНу, и почему ты не подгрузил уже готовую sum для строк? Почему тебе пришлось новый код какой-то писать? Да она вообще должна их складывать сразу в соответствии с легендой об удобстве Haskell'а! А для матриц тоже писать будешь?
Ты наверное не в курсе но в Haskell-е есть модули. Более того тот же sum находится в модуле Prelude который подгружается автоматически.
Отредактировано py.user.next (Апрель 20, 2017 11:39:01)
Офлайн
В реальной жизни никто sum для конкатенации списков не использует. Для этого есть обычная свёртка:
Prelude> foldr1 (++) ["abc", "def"] "abcdef"
Офлайн
RodegastТам не свёртка есть, а concat. Просто речь именно о применимости sum без лишних телодвижений, как в питоне сделано. Строки ты не сложишь, но переопределить магический метод можно у любого объекта, получая эффект от 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' >>>
Офлайн
> Там не свёртка есть, а concat.
Я обычно свёрткой пользуюсь ибо она более универсальна.
> Просто речь именно о применимости sum без лишних телодвижений, как в питоне сделано.
Вот. А теперь сравни всё это с тем что я на haskell-е написал.
Офлайн
RodegastВот я и жду, когда же ты сделаешь
А теперь сравни всё это с тем что я на haskell-е написал.
sum [matrix1, matrix2]
Офлайн
Зачем ждать? Ссылку на документацию по матричному модулю я тебе дал, как объяснить sum-у что с матрицами делать тоже написано. Я надеюсь что ты дальше без моей помощи сможешь справиться.
Офлайн
RodegastБыл бы он удобный, ты бы уже набросал. Вот оно удобство. В Erlang'е просто берёшь и пользуешься и умеет он то, что уметь как бы не должен изначально, по идее. А в Haskell'е вроде всё красиво и должно работать, а нужно всё равно что-то доделывать, дописывать. И списки тут только из однотипных элементов должны быть (хотя почему?).
Я надеюсь что ты дальше без моей помощи сможешь справиться.
Офлайн
> Был бы он удобный, ты бы уже набросал….доделывать, дописывать
Вот только демагогии не надо
> И списки тут только из однотипных элементов должны быть (хотя почему?).
Потому что статическая типизация. Если нужны разные типы то пользуются картежами.
Офлайн
Кстати вот ещё один модуль для работы с матрицами 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 ]
Отредактировано Rodegast (Апрель 21, 2017 16:17:09)
Офлайн