lomeo: (лямбда)
С помощью zeta function regularization можно найти суммы для 1 + 2 + 3 + … и 1 + 1 + 1 + …
С другой стороны, это суммирование вроде как линейное. Однако, если мы вычтем из первого ряда второй, то получим 0 + 1 + 2 + 3 + …, сумма которого почему-то получается отличной от суммы 1 + 2 + 3 + …

Что я упускаю?
lomeo: (лямбда)
Из дискуссии с [livejournal.com profile] sassa_nf.

В java локальные переменные метода не собираются сборщиком мусора, пока мы не выйдем из метода (наверх, разумеется, а не глубже). Это важно, потому что Scala'вские Stream из-за этого часто становятся бесполезны.

Вот имеем мы некий Stream, который любят сравнивать с Haskell'евским списком. И начинаем его обрабатывать. А обработка через некоторое время завешается с OutOfMemoryError:
val messages = Stream continually nextMessage
for (message <- messages) doSomething(message)

А теперь перепишем это так:
for (message <- Stream continually nextMessage) doSomething(message)

и обработка у нас будет вестись вечно.

А всё потому, что первый способ генерит astore, который создаёт локальную переменную. А второй — нет.

UPD: [livejournal.com profile] sassa_nf всё же заставил java работать правильно. За что ему отдельное спасибо!
lomeo: (лямбда)
Я это как-то писал, но напишу ещё раз, бо тема поднялась.

Недостатки явной рекурсии по сравнению с комбинаторами (ага, zip3):

  • Рекурсия непонятна (согласен, это субъективное).
  • Обычно используется с декомпозицией, нарушая инкапусляцию.
  • Всегда используется для работы с элементами, вместо работы с коллекцией (wholemeal programming).
  • Цепочка вызовов проще для оптимизации.
  • Сложнее нежно мною любимый equational reasoning.

Юный хаскеллист, избегай явной рекурсии!

Ну и ссылочка, куда без неё!
lomeo: (лямбда)
Клёвая реализация сабжа от [livejournal.com profile] antilamer:
data Tree a = Nil | Branch (Tree a) a (Tree a)

bfs t = [x | Branch _ x _ <- b]
  where
    b = t:[x | Branch l _ r <- b, x <- [l,r]]

Ленивость, все дела.

отсюда.
lomeo: (лямбда)
Скажите, пожалуйста, кто что использует для arbitrary precision computations в Haskell? Интересует аналог BigDecimal в java - при делении задаём режим округления, можно использовать для денег. Ну и важно иметь человеческий Read/Show.

Кроме библиотеки Jeremy Shaw есть что-нибудь стоящее? Мне не нравится, что она не на hackage и у неё есть (небольшие) проблемы с делением.
lomeo: (Default)
[livejournal.com profile] _darkus_ перевёл "Розеттский камень". Я переводы практически не читаю, и до сих пор очень сильно сомневался в их необходимости. Но вот этот текст прочитал на русском (правда, изредка заглядывая в оригинал), что сэкономило моё время.

Тем не менее интересно было бы узнать, насколько важны переводы для IT-шников. Ответьте, пожалуйста, у кого есть сложившееся мнение по этому поводу - стоит ли вообще оно того, чтобы переводить? Возможно, есть какие-то граничные случаи и общего ответа нет - тогда расскройте, если можно.

Спасибо!
lomeo: (гомер)
Ответ на комментарий от [livejournal.com profile] thesz http://gaperton.livejournal.com/47460.html?thread=886116#t886116

Краткое введение. Я считаю, что мне xmonad дают значительно больше, чем может предложить макось. Под макосью и xmonad здесь подразумевается также набор программ, соответственно для мака и линукса. [livejournal.com profile] thesz предлагает мне сначала ознакомиться с интерфейсом макоси.

Ответ.

Как мне ознакомиться с интерфейсом макоси и сделать это правильно?

Из описанных преимуществ макоси (мы же говорим об интерфейсе?), которые я встречал, дополни плз:

Меню наверху

Обычно (сильно бОльшую часть времени) я вообще не пользуюсь меню. Шоткаты делаю мою работу быстрее.

Меню пользуюсь в незнакомых программах, что случается крайне редко (за последние полгода могу вспомнить только одну новую), или в программах, в которых с шоткатами хреново (в этом случае стараюсь перейти на "правильные" программы).

Вопрос так стоит - стоит ли ставить в преимущество то, что может дать незначительный прирост производительности, да ещё и в очень редких случаях?

Кнопка zoom

У меня xmonad! нет кнопок, нет необходимости менять размер окна так, как это принято в обычных wm. Задача, которую решает кнопка zoom, у меня решается автоматически, либо шоткатами по смене layout-а.

Тут я не знаю, может быть действительно подгонка размера окна - это удобнее, чем лейауты.

Dock

Я пользовался AWN и не понял конкретно в чём польза.

Запускать приложения и открывать их окна одним способом? Приложения, для которых это нужно, делают это сами (пример - firefox). Если нет - всегда можно написать скрипт, но у меня таких проблем не возникало, поэтому такого скрипта нет. Запуск приложений вообще очень редкая задача, гораздо важнее задача работы с ними.

Между окнами же я переключаюсь так, как это принято в xmonad шоткатами - смена воркспейса, если окно не в текущем, смена окна, если окно неактивно.

Искренне не понимаю, зачем нужна эта штука.

Finder + Spotlight / Quicksilver

Работал с beagle + deskbar-applet, с gnome do. Bash + мои скрипты делают то, что мне нужно лучше, специальные программы делают конкретный поиск ещё лучше.

Например, bash ведёт себя как кусок IDE, когда находит нужные мне java-файлы по camel-case маске, mutt + mairix ищет в моих письмах, а в документах можно поискать даже простым fgrep. Для запуска всех подряд программ dmenu + dmenu_path, для запуска конкретных - шоткаты в xbindkeys.

С необходимостью же искать же одновременно и там и там и там я не сталкивался. Когда столкнусь, пойму зачем мне quicksilver.

Но тут я вижу место для повышения удобства. Правда, пока руки не доходят сделать.

Safari

Я использую firefox + vimperator и uzbl. И действительно не понимаю, как заточенная под меня вещь может быть для меня хуже, чем написанная для всех?

Здесь, правда, ещё можно поговорить о скорости, говорят, сафари быстрый, не знаю. Но я пока говорю об интерфейсе.

Безумная красота

На макось приятно смотреть. Возможно, у меня шрифты похуже. Что из этой красоты действительно было бы полезно для моей работы?

...

Вообще получается, что удобство макоси очень зависит от наличия мыши, верно? Я использую мышь 99% для веб-серфинга :)

P.S. Я работал на макбуке, но очень немного и совсем не по моему основному профилю, так что рассматривать это как хоть какое-то ознакомление не могу, но названия некоторых программ знаю, и даже их запускал! :)

Laby

Jun. 5th, 2010 03:33 am
lomeo: (Default)
Мой сын второй день пишет на тикле.

Приятно наблюдать, как написав кусок программы, Стёпка её дебажит, а потом поднаторев, пишет уже достаточно большие куски, иногда полностью всю программу (такое редко). Маленькая модель разработки.
lomeo: (лямбда)
Две библиотеки, о которых узнал из френд-ленты. Понравились.

1. mmtl via [livejournal.com profile] permea_kra.

Очередная библиотека монад-трансформеров с фишкой. Позволяет не определять для каждой монады инстанс каждого монад-класса. Таким образом модуль с ReaderT не будет ничего знать о MonadWriter, тем не менее инстансы для

(а) MonadWriter w => MonadWriter w (ReaderT r (Writer w))
и
(б) MonadWriter w m => MonadWriter w (ReaderT r (WriterT w m))

будут выводиться. Т.е. теперь мы пишем свой монад-трансформер и у нас автоматом есть инстансы для всех имеющихся монад классов.

К сожалению, (а) и (б) реализованы как отдельные инстансы. Была бы ещё возможность описать это в отдельном - типа
MonadWriter w i, MonadTrans t => MonadWriter w (t i)


Написано, что "Inspired by the paper /Functional Programming with Overloading and Higher-Order Polymorphism/, Mark P Jones"

2. Coroutine via [livejournal.com profile] nponeccop.

lightweight session types для описания протоколов. Индексированная монада для представления линейных типов, собирание типов с помощью комбинаторов типов. Понравилась реализация дуальности типа клиента и сервера - очень просто и красиво.

Подробнее в презентации Haskell Session Types with (Almost) No Class
от Jesse Tov. Есть видео, но я его не смотрел.
lomeo: (лямбда)
Пару лет назад на RSDN я показывал VladD2 связь query monad из HaskellDB с LINQ. Тогда он называл это бредом. Прошёл год или около того и он сам стал связывать HaskellDB и LINQ. Правда, к монадам отношение у него не изменилось - это способ связывания вычислений в цепочку (почти дословно).

А сегодня IB под впечатлением от того, что LINQ - это монады.

Откуда эта истерика по отношению к монадам? Почему не возникает такого нездорового ажиотажа вокруг моноидов? Они же гораздо абстрактнее, чище и прикольнее :-)

Причём я почти уверен (насчёт VladD2 больше, насчёт IB меньше), что у обоих представление о монадах мало связано с тем, что это математическая модель. Для них это скорее некий паттерн. Место монады в математике не видно - так, приёмчик. Неудивительно, что VladD2 называет это извращением.

Что ли написать свой туториал по монадам? :-)
lomeo: (гомер)
Уже, наверное, многие видели, но всё таки оставлю ссылку.

http://www.yapfiles.ru/files/69305/scale_of_universe.swf

Очень понравилось.
lomeo: (шапка джейн)


мат в три хода.

К сожалению, в одном из (правда, неосновных) вариантов есть дуаль. Но основной вариант неплох.
lomeo: (лямбда)
Аналог uniplate, не зацикливающийся на рекурсивных данных. На основе кода [livejournal.com profile] permea_kra (спасибо!).

Код на hpaste (отсюда)

Пример использования
data Rose = Rose { roseId :: Int, roses :: [Rose] }
    deriving (Data,Typeable)

testRose = let
        a = Rose 1 [b,c]
        b = Rose 2 [a,c]
        c = Rose 3 [a,b]
    in a

Работаем...
> [id | Rose id _ <- recUniplate testRose]
[1,2,3]

Ключевые слова: SYB, StableName, unsafePerformIO
lomeo: (лямбда)
На RSDN Tonal- задаёт вопрос о сериализации взаимно-рекурсивных данных.

Очевидно, что при сериализации рекурсивных данных необходимо не сериализовать уже сериализованные данные, дабы избежать цикла. Для этого в том месте, где имеется связь со следующим рекурсивным звеном, можно сохранить ссылку.

Поэтому в голову приходит замечательный пакет data-reify от Andy Gill. О его применении можно прочитать в статье Type-Safe Observable Sharing in Haskell.

Смысл в том, что мы можем разложить рекурсивные данные на нерекурсивные данные со ссылками - то, что нам и нужно.
Read more... )
Покритикуйте.
lomeo: (шапка джейн)
Простенькая, но симпатичная задачка. К сожалению, автора не знаю.



Белые начинают и выигрывают.
lomeo: (лямбда)
[livejournal.com profile] nealar сейчас в haskell@c.j.r показал на partial signatures от Олега.

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

Второй случай рулит.
lomeo: (лямбда)
А нет в javascript чего то вроде питоновского __getattr__ или смолтолкового doesNotUnderstand? Нужно, например, прокси соорудить, а механизма получения методов проксируемой сущности нет. Так что их руками передавать?

UPD: оборачиваемый объект удалённый. То, что у него есть какой-то метод становится известно только в момент вызова.

fixIO

Apr. 6th, 2009 07:13 pm
lomeo: (лямбда)
Предыстория: http://thesz.livejournal.com/950788.html?thread=7471620#t7471620

Т.е. предполагалось, что любой mdo можно развернуть в letrec (т.е. do без mfix).
Read more... )

Profile

lomeo: (Default)
Dmitry Antonyuk

December 2015

S M T W T F S
  12345
6789101112
131415 16171819
20212223242526
2728293031  

Syndicate

RSS Atom

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Oct. 23rd, 2017 08:33 pm
Powered by Dreamwidth Studios