Re[24]: хихи
От: samius Япония http://sams-tricks.blogspot.com
Дата: 31.07.12 17:31
Оценка:
Здравствуйте, vdimas, Вы писали:

V>Здравствуйте, samius, Вы писали:


V>>>То бишь в чистом ФП (якобы чистом) оператор if создает побочный эффект в том смысле, что задает порядок вычислений трех выражений-аргументов ф-ии if: predicate, then и else.


S>>Какой-какой побочный эффект


V>В упомянутом смысле.

Не имею понятия о побочных эффектах в упомянутом смысле. Ты походу описываешь C++ if-оператор, нет? Там — да, там then/else выполняются и портят мир. А хаскель даже не вычисляет then/else, потому оператор if эквивалентен соответствующей функции с точностью до некоторых нюансов, не имеющих отношение к побочным эффектам.
http://www.haskell.org/haskellwiki/If-then-else
Re[39]: Как мало людей понимает ООП...
От: Воронков Василий Россия  
Дата: 31.07.12 17:36
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>>>Субъективно. Особенно по сравнению с некоторыми мозгоразрывающими конструкциями из ФП-языков.

ВВ>>Какими?
AVK>Монады сгодятся?

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

var x = 2;
x = 3;


он посидит, подумает, и через какое-то время сам изобретет что-то вроде bind-а.

Во-вторых, монада как абстракция может вообще рассматриваться как простая абстракция для контейнера с двумя функциями, одна это обычный map, вторая — join. На примере списка — map это map, join — это concat, т.е. concat [1,2],[3,4]] = [1,2,3,4]. Пока ничего мозговзрывающего, правда? К тому же все это есть в линке, который вроде тоже мозги не взрывает.
Имея эти две функции, мы можем написать третью на их основе — join (map f xs). Надо полагать, что именно тут мозги и взрываются? А ведь это же просто SelectMany
И по сути — это все.
Если, конечно, пользоваться bind напрямую, то синтаксис получается не очень, но для того и ввели do нотацию. Код в do нотации вообще выглядит как самый обычный императивный код.

ВВ>>Каким образом карринг может являться подпоркой чего-либо?

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

Да нету никакого акта каррирования, все функции "по умолчанию" и так каррированы. Ты видимо все же имеешь в виду частичное применение — ну так они является естественным следствием того, что функции с несколькими параметрами имитируются вложенными функциями. Это же вообще голая лямбда.

ВВ>>Кортежи и алгебраические типы не нужны — они не являются дополнительными сущностями, и введены просто для удобства

AVK>Так и я про то, что для удобства в ФП точно так же приходится вводить ряд подпорок, потому что без них код станет слишком многословным и недостаточно абстрактным.

Слишком многословным — да. Недостачно абстрактным — нет. Тут важно понимать, что эти, как ты их называешь, подпорки не вводят какие-то новые уровни абстракции, которых до этого не было. Они просто позволяют писать короче и выразительнее.

AVK>>>Ага, веревка суть вервие простое. Набор функций как раз и потребовался из-за проблем с хранением всей спецификации в сигнатурах функций.

ВВ>>Набор "спецификаций", что характерно, как был, так и остался в сигнатурах функций.
AVK>Только вот задавать его стало проще.

Разве это плохо? И почему это является подпоркой? Мы не вышли здесь за рамки чистого ФП.
Re[15]: хихи
От: SV.  
Дата: 31.07.12 17:36
Оценка:
Здравствуйте, Lazy Cjow Rhrr, Вы писали:

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


S>>>Я исхожу из того, что человек называет окружающие предметы в терминах существительных (мозг его так устроен), и это ложится на существующую ООП парадигму.


M>>Расскажи, как ложится на ООП-парадигму такое банальное описание, как «открыть дверь». С нетерпением жду


LCR>Кстати, если-таки дверь открыть удастся, то я могу подкинуть ещё парочку задач:

LCR>1. Описать с помощью ООП как корова щиплет траву (там будет корова.щипать(трава), трава.бытьОщипанной(корова) или Природа.поедание(корова, трава)?).
LCR>2. Совсем хардкор, где бесполезность ООП лично для меня очевидна. Есть лужа (совсем необязательно являющаяся сечением шара), в лужу бросили камень (вектор скорости совсем необязательно перпендикулярным поверхности). Задача: описать поведение волн с течением времени.

Мужики, вы чем ваще занимаетесь, а? Дверь, корова — вы взрослые люди, инженеры, или кто? У каждого, кто хотя бы лет 5 проработал в нашей промышленности примеров и контрпримеров должно быть полные карманы.

Нашелся один Sinclair, который привел целых два. Первый — бухгалтерия, которая оперирует счетами, но класс Account заводить неправильно, второй — решение квадратных уравнений, где ООП не нужно. Извините, если кого пропустил. Читал по диагонали, потому, что про коров читать не могу. Заратустра не позволяет.

Sinclair'у про квадратные уравнения я ответил, что это — простейшая функция, которую проходят в средних классах школы и он бы еще 2 + 2 складывал в объектной парадигме. Если взять реальную (по сложности) инженерную задачу, типа, написать тот же решатель квадратных уравнений, НО! с любой заданной точностью, с реюзабельной арифметикой и хорошей интегративностью, ООП будет вне конкуренции по понятности кода такого проекта для новичков (а других свойств я ООПу и не приписывал).

Про бухгалтерию я не знаю, что ответить. Я ее знаю на уровне ведения ООО и у меня идея класса Account отторжения не вызывает. Предполагаю, что Sinclair на бухгалтерии пол-Кореи собак съел и объяснит, почему класс Account для настоящей бухгалтерии противопоказан. Я или соглашусь, или поспорю. То же самое касается остальных. Приглашается любой желающий.
Re[40]: Как мало людей понимает ООП...
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 31.07.12 17:42
Оценка:
Здравствуйте, Воронков Василий, Вы писали:

ВВ>Монада сами по себе не являются чем мозгоразрывающим, но вокруг монад присутствует некий хайп. В действительности там все очень просто.


Ага, все просто когда наконец мозги себе поломаешь. Ну так и в ООП тоже все просто в таком разрезе.

ВВ>Слишком многословным — да. Недостачно абстрактным — нет. Тут важно понимать, что эти, как ты их называешь, подпорки не вводят какие-то новые уровни абстракции, которых до этого не было


А я этого нигде и не писал.

ВВ>Они просто позволяют писать короче и выразительнее.


А ФП и ООП в целом, это тоже про короче и выразительнее.

ВВ>>>Набор "спецификаций", что характерно, как был, так и остался в сигнатурах функций.

AVK>>Только вот задавать его стало проще.

ВВ>Разве это плохо?


Разве я писал что плохо? Я писал о другом — ФП как парадигма не лучше ООП, а в чем то даже хуже. И если уж искать в ООП соринки, то и бревна ФП неплохо бы тогда упоминать.

ВВ> И почему это является подпоркой? Мы не вышли здесь за рамки чистого ФП.


Подпоркой, потому что это дополнительные концепции к базовым, появившиеся из-за их (базовых концепций) недостаточной краткости и выразительности.
... << RSDN@Home 1.2.0 alpha 5 rev. 61 on Windows 7 6.1.7601.65536>>
AVK Blog
Re[6]: Как мало людей понимает ООП...
От: SV.  
Дата: 31.07.12 17:44
Оценка:
Здравствуйте, elmal, Вы писали:

SV.>>Что касается "чтоб потом это можно было поддерживать". У вас новые кадры подключаются к проекту? Бывает такое? Или, может быть, новые кадры используют библиотеки/API, которые вы пишете? Если да, то ООП помогает им быстрее соотнести ваш код с решаемыми им задачами. Не больше и не меньше. Избавляться от копипаста оно определенно не помогает.

E>А почему именно ООП помогает? Я же говорю, что помогать может не только ООП, но и ФП, АОП, Декларативный П, и даже Императивный П. В проекте много различных задач, для одних лучше один подход, для других другой. И рулит именно комбинация подходов. Применять же ООП вообще ко всему слепо, просто потому, что оно ООП и оно рулит — путь к провалу проекта.

Давайте сделаем так. Приведите в пример не-ОО кусок API вашего продукта (можно воображаемого), который яснее, чем ОО, и мы продолжим с этой точки.
Re[43]: Как мало людей понимает ООП...
От: kittown  
Дата: 31.07.12 17:54
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>Я не знаю что это за люди такие, которые пишут более менее сложный софт не вводя ни одной новой абстракции. У нас прикладники вводят больше в количественном выражении абстракций, чем системная группа.


Вопрос в соотношении. Одним подавай язык для задания бизнес-правил, у них все во вполне конкретных терминах и все абстракции заранее проанализированы. Но кое-какие абстракции вносить разрешается (вьюшки с вычисляемыми полями в базе). Другим — Objective-C или Java.
Re[16]: хихи
От: Философ Ад http://vk.com/id10256428
Дата: 31.07.12 17:58
Оценка:
Здравствуйте, SV., Вы писали:

SV.>Мужики, вы чем ваще занимаетесь, а? Дверь, корова — вы взрослые люди, инженеры, или кто? У каждого, кто хотя бы лет 5 проработал в нашей промышленности примеров и контрпримеров должно быть полные карманы.


1)
В чистом виде ООП практически не встречается — не следит никто за чистотой парадигмы. Почти везде компромис между сложностью/трудоёмкостью и ленью программистов.
Идеальный код — название книжки, а в реальной жизни он не встречается.

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

Кроме того, многие просто бояться сюда постить свой рабочий код, ибо если узнает начальство — получат по шапке.
Некоторые элементарно стесняются его сюда выкладывать.
-------------------
Сказанное выше относится как к описанию архитектуры, так и к самому коду.
Всё сказанное выше — личное мнение, если не указано обратное.
Re[44]: Как мало людей понимает ООП...
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 31.07.12 17:59
Оценка:
Здравствуйте, kittown, Вы писали:

K>Вопрос в соотношении. Одним подавай язык для задания бизнес-правил, у них все во вполне конкретных терминах и все абстракции заранее проанализированы


Это не программисты уже в привычном понимании.
... << RSDN@Home 1.2.0 alpha 5 rev. 61 on Windows 7 6.1.7601.65536>>
AVK Blog
Re[41]: Как мало людей понимает ООП...
От: Воронков Василий Россия  
Дата: 31.07.12 18:03
Оценка: +1
Здравствуйте, AndrewVK, Вы писали:

ВВ>>Монада сами по себе не являются чем мозгоразрывающим, но вокруг монад присутствует некий хайп. В действительности там все очень просто.

AVK>Ага, все просто когда наконец мозги себе поломаешь. Ну так и в ООП тоже все просто в таком разрезе.

Так обо что именно ломаются мозги? Можно все-таки это как-то объяснить? Линк на твой взгляд тоже взрывает мозг?

ВВ>>Слишком многословным — да. Недостачно абстрактным — нет. Тут важно понимать, что эти, как ты их называешь, подпорки не вводят какие-то новые уровни абстракции, которых до этого не было

AVK>А я этого нигде и не писал.

Ты писал, что код станет недостаточно абстрактным. Это неверно.
И мне не очень понятно, почему ты считаешь это подпорками, мы не выходим тут за рамки парадигмы.

ВВ>>Они просто позволяют писать короче и выразительнее.

AVK>А ФП и ООП в целом, это тоже про короче и выразительнее.

Остается понять, у кого это получается лучше.

ВВ>>>>Набор "спецификаций", что характерно, как был, так и остался в сигнатурах функций.

AVK>>>Только вот задавать его стало проще.
ВВ>>Разве это плохо?
AVK>Разве я писал что плохо? Я писал о другом — ФП как парадигма не лучше ООП, а в чем то даже хуже. И если уж искать в ООП соринки, то и бревна ФП неплохо бы тогда упоминать.

Здесь, видимо, неплохо бы объяснить, чем же хуже, и о каких бревнах речь.
Я вот замечаю обратное — при программировании на ОО языке постоянно выходишь за рамки парадигмы, как раз чтобы код был короче и понятнее. И гибче. Развитие того же шарпа хорошо это показывает. В ФЯ же такое происходит гораздо реже.

ВВ>> И почему это является подпоркой? Мы не вышли здесь за рамки чистого ФП.

AVK>Подпоркой, потому что это дополнительные концепции к базовым, появившиеся из-за их (базовых концепций) недостаточной краткости и выразительности.

Ну если мы не выходим за рамки ФП, то это никак не может являться новой концепцией. Мы просто увидели то, что в ФП было всегда, и придумали для этого более удобный энкодинг.
В ООП же, для сравнения, у нас действительно появляются подпорки. Даже банальные статические методы уже выходят за рамки ООП.
Современные ОО языки вообще развиваются по принципу — постоянно упираемся в неудобство и тяжеловесность ООП, и начинаем фаршировать язык новыми фичами, сиречь подпорками, которые к ООП вообще никакого отношения не имеют. После этого, чтобы оправдаться, называем язык "гибридным". Но ООП у нас все равно по-прежнему самое-самое. И тайп-классы и алгебраические типы в функциональных языках мы считаем "подпорками".

Я чего-то тут явно не понимаю.
Re[7]: Как мало людей понимает ООП...
От: elmal  
Дата: 31.07.12 18:20
Оценка:
Здравствуйте, SV., Вы писали:

SV.>Давайте сделаем так. Приведите в пример не-ОО кусок API вашего продукта (можно воображаемого), который яснее, чем ОО, и мы продолжим с этой точки.

public class NotNullUtils {
    public static <T> List<T> processNull(List<T> list) {
        if (list == null) {
            return new ArrayList<T>();
        }
        return list;
    }

    public static String processNull(String string) {
        if (string == null) {
            return "";
        }
        return string;
    }
...

Пожалуйста. Набор статических функций без какого либо состояния, которыми очень часто пользуюсь.
Re[16]: хихи
От: samius Япония http://sams-tricks.blogspot.com
Дата: 31.07.12 18:22
Оценка:
Здравствуйте, SV., Вы писали:

SV.>Sinclair'у про квадратные уравнения я ответил, что это — простейшая функция, которую проходят в средних классах школы и он бы еще 2 + 2 складывал в объектной парадигме. Если взять реальную (по сложности) инженерную задачу, типа, написать тот же решатель квадратных уравнений, НО! с любой заданной точностью, с реюзабельной арифметикой и хорошей интегративностью, ООП будет вне конкуренции по понятности кода такого проекта для новичков (а других свойств я ООПу и не приписывал).

Выделенное неплохо бы обосновать. Но только не тем, что новички сначала проходят ООП, а потом все остальное. Бывает и по-другому.
Re[16]: хихи
От: Lazy Cjow Rhrr Россия lj://_lcr_
Дата: 31.07.12 19:50
Оценка: 149 (4)
SV.,

LCR>>1. Описать с помощью ООП как корова щиплет траву (там будет корова.щипать(трава), трава.бытьОщипанной(корова) или Природа.поедание(корова, трава)?).

LCR>>2. Совсем хардкор, где бесполезность ООП лично для меня очевидна. Есть лужа (совсем необязательно являющаяся сечением шара), в лужу бросили камень (вектор скорости совсем необязательно перпендикулярным поверхности). Задача: описать поведение волн с течением времени.

SV.>Мужики, вы чем ваще занимаетесь, а? Дверь, корова — вы взрослые люди, инженеры, или кто? У каждого, кто хотя бы лет 5 проработал в нашей промышленности примеров и контрпримеров должно быть полные карманы.


О! А с лужами и камнями вам стало быть всё-всё понятно?

Знаете, нужно хотя бы разобраться с простыми вещами, такими как открывание двери и щипание травы. Потому как в данном симметричном взаимодействии присутствует неопределённость, люфт я бы даже сказал, что считать субъектом, а что объектом взаимодействия. Не хочешь говядину с травой, вот тебе более животрепещущий пример — бинарные операции над полями. Да, да, обычное сложение вещественных чисел.
1 + 2
Мы легко делаем финт ушами и трактуем сию запись как синтаксический сахар для 1.+(2). И типа никаких проблем. Если бы...
Сложение коммутативно. Это значит, что 1 + 2 должно быть то же самое, что и 2 + 1. Чтобы более рельефно отразить проблему я запишу это как 1.0 + 2. Внезапно классы Integer и Float оказались связанными одной цепью — метод Integer.+(Float) обязан быть тождественным методу Float.+(Integer). А если ты захочешь добавить класс Rational как пару целых чисел, и реализовать сложение с вещественными числами, тебе надо будет во-первых перечислить в этом классе все возможные случаи, а во вторых хакнуть все системные классы, и добавить туда _.+(Rational).

Поехали дальше. Есть ещё такие штуки как отношения — это подмножества декартова произведения множеств. Ну там <, =<, ==, какие-нибудь хитрые отношения частичного порядка. И частенько бывает, что от отношений требуется симметричность, и транзитивность. Симметричность, это когда x (R) y совпадает с y (R) x для любых x и y. Если мы реализуем отношение как приклеивание метода r к объекту, мы вступаем на зыбкую почву. Мы должны гарантировать, что x.r(y) есть то же самое, что и y.r(x) для любых пар (это довольно легко, если x и y одного класса), но что если x и y принадлежит различным классам, но как значения концептуально эквивалентны? Например, всё тот же класс Rational и мы хотим чтобы оно проверялось на равенство с вещественными числами. Или чуть сложнее: мы например можем ввести отношение == на списках, пусть они будут эквивалентны, если они поэлементно равны. Аналогично мы можем ввести отношение эквивалентности на хэш-таблицах. И вполне естественно, что мы можем захотеть, чтобы список [a,b,c] был эквивалентен хэштаблице [0->a,1->b,2->c]. Как будем реализовывать ==? А ввести отношение лексикографического порядка для всех сравнимых списков и хэшей?

Я уже не говорю о том, что если заданы операции == и <, то все остальные — !=, >, >=, =< определяются автоматически, но выразить этот автоматизм нет никакой возможности. Тем более, что сравнивать есть с чем: классы типов Eq и Ord сами знаете где.

Ещё? Хорошо. Конкатенация ленивых списков (их ещё в SICP зовут Streams).
a = ...
b = ...
func(a ::: b)
func принимает значения типа LazyList. Как будем реализовывать операцию :::? Ну казалось бы
public LazyList :::(LazyList that) {
  // приклеиваем к this that и возвращаем 
  return new LazyList(()->this)
}

Всё, мы в глубокой заднице. Представим теперь, что a — это очень большой, или даже бесконечный ленивый список. a ::: b будет преобразовано в a.:::(b), и затем чтобы вызвать метод ::: придётся вычислить a. Всё, мы зависли и/или сожрали всю память.

Короче, реализация бинарных соотношений и операций как методов — это ужасно граблеобразно и неестественно. Это как минимум некрасиво. А решение-то на поверхности: отказаться от клеящего объекта, ввести сообщения приходящие из ниоткуда — свободные функции и ввести ограничения для аргументов функций в виде классов типов или обобщённых интерфейсов.

SV.>Нашелся один Sinclair, который привел целых два. Первый — бухгалтерия, которая оперирует счетами, но класс Account заводить неправильно, второй — решение квадратных уравнений, где ООП не нужно. Извините, если кого пропустил. Читал по диагонали, потому, что про коров читать не могу. Заратустра не позволяет.


Да, пример Account интересен, я тоже жду продолжения.
quicksort =: (($:@(<#[),(=#[),$:@(>#[)) ({~ ?@#)) ^: (1<#)
Re[17]: хихи
От: Steamus Беларусь  
Дата: 31.07.12 20:38
Оценка:
Здравствуйте, Lazy Cjow Rhrr, Вы писали:

LCR>Сложение коммутативно. Это значит, что 1 + 2 должно быть то же самое, что и 2 + 1. Чтобы более рельефно отразить проблему я запишу это как 1.0 + 2. Внезапно классы Integer и Float оказались связанными одной цепью — метод Integer.+(Float) обязан быть тождественным методу Float.+(Integer). А если ты захочешь добавить класс Rational как пару целых чисел, и реализовать сложение с вещественными числами, тебе надо будет во-первых перечислить в этом классе все возможные случаи, а во вторых хакнуть все системные классы, и добавить туда _.+(Rational).


LCR>Поехали дальше. Есть ещё такие штуки как отношения — это подмножества декартова произведения множеств. Ну там <, =<, ==, какие-нибудь хитрые отношения частичного порядка. И частенько бывает, что от отношений требуется симметричность, и транзитивность. Симметричность, это когда x (R) y совпадает с y (R) x для любых x и y. Если мы реализуем отношение как приклеивание метода r к объекту, мы вступаем на зыбкую почву. Мы должны гарантировать, что x.r(y) есть то же самое, что и y.r(x) для любых пар (это довольно легко, если x и y одного класса), но что если x и y принадлежит различным классам, но как значения концептуально эквивалентны? Например, всё тот же класс Rational и мы хотим чтобы оно проверялось на равенство с вещественными числами. Или чуть сложнее: мы например можем ввести отношение == на списках, пусть они будут эквивалентны, если они поэлементно равны.


...

LCR>Да, пример Account интересен, я тоже жду продолжения.


Сильно. Да. Очень сложно приткнуться к дискуссии. Про Account — согласен.
Re[23]: хихи
От: vdimas Россия  
Дата: 31.07.12 20:57
Оценка: -3 :)
Здравствуйте, AndrewVK, Вы писали:

AVK>При чем тут порядок вычислений? if для заданных входных значений всегда возвращает один и тот же результат, и не приводит ни к каким изменениям стейтов объектов или устройств ввода/вывода. Значит, по определению, функция if чистая.


В этом и состоит моя ирония, т.к.:
— по определению чистых ф-ий им не важен порядок вычисления операндов;
— ленивость вычислений в чистом ФП не играет никакой рояли, можно считать ленивость подробностью реализации, то бишь семантически её нет;
— но для случая ветвления на if-then-else или ветвления на ПМ (что одно и тоже семантически), та самая ленивость, в сочетании с де-факто порядком вычисления аргументов, начинает играть рояль. Некие выражения вычисляются заведомо РАНЬШЕ других, формируя итоговый порядок вычислений. И что характерно, в Хаскеле на этот заданный порядок вычислений можно полагаться безо-всяких монад. Как раз было обсуждение насчет комбинаторных парсеров на Хаскеле в тему.


V>>Ну а теперь вики:

V>>Структу?рное программи?рование ...
V>>1. Любая программа представляет собой структуру, построенную из трёх типов базовых конструкций:
V>> * последовательное исполнение — однократное выполнение операций в том порядке, в котором они записаны в тексте программы;
V>> * ветвление — однократное выполнение одной из двух или более операций, в зависимости от выполнения некоторого заданного условия;
V>> * цикл — многократное исполнение одной и той же операции до тех пор, пока выполняется некоторое заданное условие (условие продолжения цикла).

AVK>Превосходно. Итого, из трех базовых конструкций в ФП две отсутствуют.


Заблуждение.


AVK>А логические ветвления присутствуют, наверное, в любой парадигме.


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


V>>Про последовательное исполнение в Хаскеле — do-стрелки.

AVK>А при чем тут Хаскелл?

А чтобы сферических коней не гонять туда-сюда.


V>>Про циклы будем или уже ну его? )))

AVK>Циклов в ФП тоже нет.

Таки будем? )))

Наличие рекурсии в языке в сочетании с ветвлением даёт цикл. Это прямо по определению что есть рекурсия, что есть цикл и что есть процедура/ф-ия в структурном программировании.

Видя твоё нежелание в предыдущие разы что-то сопоставлять самому, сделаю это за тебя:

* цикл — многократное исполнение одной и той же операции до тех пор, пока выполняется некоторое заданное условие (условие продолжения цикла).

* Повторяющиеся фрагменты программы (либо не повторяющиеся, но представляющие собой логически целостные вычислительные блоки) могут оформляться в виде т. н. подпрограмм (процедур или функций). В этом случае в тексте основной программы, вместо помещённого в подпрограмму фрагмента, вставляется инструкция вызова подпрограммы.

* В программировании рекурсия — вызов функции (процедуры) из неё же самой


И да, изначально далеко не все языки позволяли рекурсивные вызовы. Вот как раз в ф-ых языках она и появилась в кач-ве способа организации цикла.
Re[18]: Как мало людей понимает ООП...
От: vdimas Россия  
Дата: 31.07.12 21:07
Оценка:
Здравствуйте, samius, Вы писали:

S>Причем я затрудняюсь назвать области, где рулит ООП и не рулит ФП. А наоборот — легко.


Что значит "рулит"?


S>Так же считаю что мозг работает в большей мере таким образом, каким обучен. И что минимальная достаточная модель (по-вашему "реальная модель мира") вообще не относится ни к ФП ни к ООП и что люди описывать такую модель вряд ли смогут.


Уже смогли. Мозг мыслит абстракциями, то бишь упрощениями. Именно абстрагирование от подробностей позволяет мозгу систематизировать и накапливать знания. Иначе не было бы никакого "обучен".
Re[28]: Как мало людей понимает ООП...
От: vdimas Россия  
Дата: 31.07.12 21:08
Оценка:
Здравствуйте, Mamut, Вы писали:

M>Где ты видишь бред? Бред пока у людей, которые неспособны подтвердить свой тезис, что ООП прекрасно моделирует реальность.


Не хуже человеческого мозга. Реальность всегда моделируется с некими упрощениями, то бишь абстрактно.
Re[30]: Как мало людей понимает ООП...
От: vdimas Россия  
Дата: 31.07.12 21:10
Оценка:
Здравствуйте, Sinclair, Вы писали:

Противоречие самому себе:

* специальный метод bool isOpen().
* видите, открыта ли дверь.

Re[24]: хихи
От: samius Япония http://sams-tricks.blogspot.com
Дата: 31.07.12 21:17
Оценка: -1
Здравствуйте, vdimas, Вы писали:

V>- но для случая ветвления на if-then-else или ветвления на ПМ (что одно и тоже семантически), та самая ленивость, в сочетании с де-факто порядком вычисления аргументов, начинает играть рояль. Некие выражения вычисляются заведомо РАНЬШЕ других, формируя итоговый порядок вычислений. И что характерно, в Хаскеле на этот заданный порядок вычислений можно полагаться безо-всяких монад. Как раз было обсуждение насчет комбинаторных парсеров на Хаскеле в тему.

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

V>>>Ну а теперь вики:

V>>>Структу?рное программи?рование ...
V>>>1. Любая программа представляет собой структуру, построенную из трёх типов базовых конструкций:
V>>> * последовательное исполнение — однократное выполнение операций в том порядке, в котором они записаны в тексте программы;
V>>> * ветвление — однократное выполнение одной из двух или более операций, в зависимости от выполнения некоторого заданного условия;
V>>> * цикл — многократное исполнение одной и той же операции до тех пор, пока выполняется некоторое заданное условие (условие продолжения цикла).

AVK>>Превосходно. Итого, из трех базовых конструкций в ФП две отсутствуют.


V>Заблуждение.

Тут вообще в SP речь об операциях, точнее об statement-ах (см http://en.wikipedia.org/wiki/Structured_programming).
Согласно http://en.wikipedia.org/wiki/Imperative_programming

In computer science, imperative programming is a programming paradigm that describes computation in terms of statements that change a program state.


В итоге выходит что чистый ФП не имеет отношения к SP, т.к. не содержит statement-ов, изменяющих состояние программы. Т.е. 3/3х конструкций структурного программирования не про чистый ФЯ.
Re[19]: Как мало людей понимает ООП...
От: samius Япония http://sams-tricks.blogspot.com
Дата: 31.07.12 21:21
Оценка:
Здравствуйте, vdimas, Вы писали:

V>Здравствуйте, samius, Вы писали:


S>>Причем я затрудняюсь назвать области, где рулит ООП и не рулит ФП. А наоборот — легко.


V>Что значит "рулит"?

значит крут

S>>Так же считаю что мозг работает в большей мере таким образом, каким обучен. И что минимальная достаточная модель (по-вашему "реальная модель мира") вообще не относится ни к ФП ни к ООП и что люди описывать такую модель вряд ли смогут.


V>Уже смогли.

Можно пример с убедительным доказательством что модель является действительно минимальной?

V>Мозг мыслит абстракциями, то бишь упрощениями. Именно абстрагирование от подробностей позволяет мозгу систематизировать и накапливать знания. Иначе не было бы никакого "обучен".

И причем тут ООП?
Re[34]: Как мало людей понимает ООП...
От: vdimas Россия  
Дата: 31.07.12 21:27
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>Вот выражение некоторой более-менее изолированной мысль: "скоро начнёт смеркаться". Какие тут можно выделить объекты?


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