?

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 11:22 am
(Link)
Понимаю ли я ООП, удалось ли мне продемонстрировать мощь ФП/ЯП - это всё в глазах наблюдателя.

Вы давайте критику. Что мне не удалось продемонстрировать конкретно, как это надо было демонстрировать, чтобы как минимум вам было понятно. Что я не понимаю в ООП, как это надо понимать с вашей точки зрения. И тп и тд.

Давайте сравним наше понимание. Я, например, понимаю так, что ООЯ обязательно императивны - у объектов есть идентичность (identity), которая позволяет различать объекты, одинаковые по всем своим свойствам. Грубо говоря, к любому значению a приписывается некий id, и они всюду ходят парой: (id,a), (id,b), (id,(a,b,c)). (id256,x) = (id1,1) + (id2,2) и (id1024,x) = (id1,1) + (id2,2).

Проектирование вычислений обязательно должно учитывать наличие этого id.

По-моему, это уже достаточное основание различать способы поиска процесса вычислений в ФП и ООП.
(Удалённый комментарий)
[User Picture]
From:blacklion
Date:Апрель 14, 2009 12:20 pm
(Link)
Любую задачу (или класс задач) я могу решить красиво и с применением ООП.
Ну, вот решите мне красиво запись грамматик прямо в коде ООП-языка (Java/C++) с получением на выходе парсера этой грамматики.

Не, yacc и прочие внешние генераторы — не красивое (хотя вполне рабочее и индустриальное) решение. И код вида

Grammar g = new Grammar().
g.addRule(new Rule(…));


не красивое.
(Удалённый комментарий)
[User Picture]
From:blacklion
Date:Апрель 14, 2009 12:31 pm
(Link)
http://legacy.cs.uu.nl/daan/download/parsec/parsec.html почти идеален :) Думаю (уверен), что можно избавится и от последних ключевых слов в пользу совершенно стандартной БНФ. Уж если бейсик сделали :)
(Удалённый комментарий)
(Удалённый комментарий)
(Удалённый комментарий)
[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: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:bacek
Date:Апрель 14, 2009 12:55 pm
(Link)
Ой, а выразите мне красиво на "ООП" семантику foreach.
(Удалённый комментарий)
[User Picture]
From:bacek
Date:Апрель 14, 2009 01:10 pm
(Link)
Вы будете смеяться, но да. В Вы вот элементарной разницы между foreach и for заметить не можете.
[User Picture]
From:dz
Date:Апрель 14, 2009 12:43 pm
(Link)
почему "обязательно"? применение любого set/map убивает учитывание этого id на раз...
[User Picture]
From:thesz
Date:Апрель 14, 2009 01:16 pm
(Link)
Далеко не всегда.

Ты ещё скажи, что ты графы строишь индуктивным методом. ;)

> Go to Top
LiveJournal.com