?

Log in

No account? Create an account
"ты, Завалишин, как e в степени x - хоть кол на голове теши" - dz

> Свежие записи
> Архив
> Друзья
> Личная информация
> DZ Online

Апрель 14, 2009


Previous Entry Поделиться Next Entry
06:32 am - "ты, Завалишин, как e в степени x - хоть кол на голове теши"
Наконец, пришли математики с предъявой - чо я тут про ОО, а это частный случай, а они про общий, а я про это молчок.

Пацаны - а знаете анекдот? Как математик идёт мимо камерного театра, замечает вывеску, и заинтересованно заходит внутрь. Через минуту выходит разочарованный со словами "тривиальный случай - ка равно трём"...?

Я вот примерно в этом же ключе случай рассматриваю - частный, тривиальный, но ОЧЕНЬ практичный. А фп мне симпатично, но пока что это и всё. Вы за него сначала сами повоюйте, чтоб хотя бы я начал вас до конца понимать. А то, извините за самомнение, но пока даже я всего не понял, рассчитывать на широкие массы программеров - ну - как бы это сказать - преждевременно.

Ну и - предлагаю некоторое утверждение, которое и сам считаю спорным. Я его породил в процессе обдумывания предъяв фп-шников, вспомнив по дороге про Форт. Который жуть какой красивый, только это не вызывает никакого желания им пользоваться, а после первой попытки - даже очень успешной - когда ты тратишь полчаса на написание, а уже через час тебе надо два часа на прочтение - понимаешь, что на нём точно не надо ничего никогда писать. Если это хочешь иногда и читать тоже.

Мысль вот какая. Надо выбирать не самый широкий базис, не самую всеобъемлющую парадигму, а МИНИМАЛЬНО возможный базис. Идеален не тот ЯП, на котором можно написать ЛЮБУЮ программу, а тот, на котором можно написать ЛЮБУЮ НУЖНУЮ тебе программу. То есть - никому не нужны к-мерные театры. Для 3-мерных существ ВПОЛНЕ достаточно 3-мерных, и давать в этом месте гибкость - бессмысленно и ВРЕДНО.

Утверждение: Правильный, хороший ЯП, неполноценен и ИЗБЫТОЧЕН, а полноценный и неизбыточный (лисп, форт, ассемблер стековой машины) - вреден и чрезмерен.

Утверждение: программирование - это НЕ написание программы, а написание ТАКОЙ программы, процесс написания которой позволяет организовывать мышление программиста эффективным с точки зрения формализации предметной области способом. Запуск программы на исполнение - важный, но почти побочный эффект её написания. (это вообще кто-то древний сказал...)

PS: Я прощёлкал - а когда это в течении последних 75 лет присваивание признали функционально кошерным?

PPS: Мне тут ещё фразу подарили: "третий элемент кортежа похож на емейл". Пишу, чтобы не забыть. Очень хочу посмотреть на спеку для ФП-библиотеки функций, в которой говорится, что все функции принимают в качестве параметра кортежи с третьим элементом, похожим на емейл. Сплю и вижу. Сплю, вижу, и фигею, дорогая редакция. /* int [] myfunc( int [] ); third int in array supposed to be x coordinate in inches */

(94 комментария | Оставить комментарий)

Comments:


[User Picture]
From:thesz
Date:Апрель 14, 2009 12:20 pm
(Link)
Это вот с такими простыми примерами всё выглядит просто.

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

Для справки. Ленивый порядок вычислений - это когда что угодно вычисляется не более одного раза и только по необходимости. При этом порядке вычислений вызов (f x (error "AAA")) может не дать ошибки "AAA", если второй аргумент функции не используется.

Собственно, ленивый порядок вычислений - это наиболее мощный функциональный порядок вычислений, да ещё и наиболее чистый. Он Тьюринг-полный без выхода из этой парадигмы (для других порядков вычислений требуется наличие ссылок - references).

На всякий случай. Ленивый порядок вычислений реализуется на так называемых персистентных структурах - снаружи они выглядят все на одно лицо, а внутри могут быть устроены по-разному. Так и в ленивых языках - значение одно, а состояния два - вычислено, или ещё нет. А разницы никакой.

Поэтому идентичность есть, но она незаметна. ;)
(Удалённый комментарий)
[User Picture]
From:bacek
Date:Апрель 14, 2009 01:14 pm
(Link)
Скажите, в вам спортлото гарантировало отсутсвие сайдэффектов в Function<K,V>?
[User Picture]
From:bacek
Date:Апрель 14, 2009 01:23 pm
(Link)
Да, и то, что пресловутый V уже вычислился на момент Function не наводит на размышления?
[User Picture]
From:thesz
Date:Апрель 14, 2009 01:29 pm
(Link)
Более того, стандартный итератор здесь не поможет, поскольку не даст воспользоваться уже вычисленными результатами.

Так что там ошибка на ошибке и ошибкой погоняет.
(Удалённый комментарий)
[User Picture]
From:thesz
Date:Апрель 14, 2009 02:07 pm
(Link)
Отмахиваться "обобщается на Iterable" не стоит.

Попробуйте, лучше.
(Удалённый комментарий)
[User Picture]
From:bacek
Date:Апрель 14, 2009 02:45 pm
(Link)
"Вы делаете мне смешно."

Я могу вот это запрограммировать на С++. "Реализацию придумайте в качестве упражнения. Это очень просто." и далее по тексту.

(Всё, рекапча заколебала окончательно)
[User Picture]
From:thesz
Date:Апрель 14, 2009 01:27 pm
(Link)
А теперь заверните всё это на самих себя:
>pre
>lsin xs@(x0:_) = integrate (sin x0) (timeDerivative (lcos xs))
lcos xs@(x0:_) = integrate (cos x0) (lnegate $ timeDerivative (lsin xs))</pre>Для этого ваш итератор должен создавать вычисленную голову и отложенный хвост. На вашей картинке этого не видно. Поэтому задача сложней, чем вы думаете.

Собственно, где я применял ленивые вычисления:
- ленивые степенные ряды для всяких интеграторов
- синтаксический разбор
- ассемблеры
- трансляторы (анализ и синтез записываются вместе, причем для синтеза требуется результат анализа (части) структуры)
- упрощение логических выражений
- моделирование аппаратуры, вот ядро: http://thesz.mskhug.ru/browser/hiersort/core
- и где-то ещё в сотне мест, поскольку их контролировать трудно, они очень часто помогают.
(Удалённый комментарий)
[User Picture]
From:thesz
Date:Апрель 14, 2009 02:10 pm
(Link)
ФП-адаптеры и genuine ФП.

Вопрос - что лучше?

Лично у меня разница в строках кода в решениях получилась в районе 8 раз для этих самых бесконечных рядов. Это без инфраструктуры, с инфраструктурой ещё больше. Лично у меня вопросов больше нет.
(Удалённый комментарий)
[User Picture]
From:thesz
Date:Апрель 14, 2009 07:51 pm
(Link)
Отсутствие глубокой инспекции значений. Изменяемые значения.

Замыкания Java будут вместе с вот этими вышеуказанными дефектами.

Оно мне надо?
From:growler
Date:Апрель 15, 2009 05:28 am
(Link)
Нету в Java 7 замыканий.
Не будет.
Уже точно.
Противники отбились под девизом "чтоб коллективному индусу было понятно". Стон разочарования прокатился пару месяцев назад, гугль поможет найти следы.

Есть ещё один verbose programming language (видимо, то, что имел в виду автор под "избыточностью"), который делался под похожим девизом.
Кобол называется. Хороший язык, заслуженный.
Вот ява идет его стопами.

Хорошо по этому поводу было сказано Visual Basic now has lambda and no one expects a VB developer to throw himself off a building. Yet somehow, these days too many think Java developers can't handle more advanced functionality.

  lazy val apply  = ident ~ parentheses(repsep(expr, ",")) ^@ Apply
  lazy val varref = ident ^@ Var

  lazy val simpleExpr = (spawn | apply | parentheses(expr) | varref | constant) as "simple expression"

  lazy val spawn = "spawn" ~> ident ~ parentheses(opt(expr)) ^@ Spawn as "spawn expression"

Это scala. Все слова в rvalue, кроме скобок и строк -- функции. Значения -- тоже функции. Которые возвращают функции :) Все это, в конечном итоге, транслируется в классы и объекты явы, но записывать это в синтаксе яве у меня нет ни малейшего желания. К хорошему быстро привыкаешь :-)

> Go to Top
LiveJournal.com