Re[8]: Функциональный/нефункциональный
От: Klapaucius  
Дата: 06.02.08 13:07
Оценка: 35 (1) +3 -1
Здравствуйте, eao197, Вы писали:

E>Кажется, Страуструп сказал, что язык программирования поддерживает какую-то парадигму (да не обидится на меня Гена Васильев) только если язык поддерживает необходимые средства для использования этой парадигмы при программировании на этом языке.


Не надо прикрываться Страуструпами. Даже если бы он обладал непогрешимостью в вопросах, объявляемых ex catedra ну или ex codex в данном случае — определению это не помогло бы, ведь оно ни о чем не говорит. Оно бессодержательно, как и определение веревки, согласно которому это вервие простое.
Я-то спрашивал, определение, из которого следует, какие средства необходимы. Мое определение заключается в том, что функциональный язык — это язык, в котором функции являются FCO.

E>Например, поэтому язык C не считается ООЯ, хотя он и позволяет писать программы в стиле ООП. Поскольку по сравнению с ООЯ в C нужно прикладывать слишком много усилий для поддержки ООП.


Нет, не поэтому. Слова "слишком" и "много" не имеют никакого смысла. Когда слишком много, а когда еще не слишком? И в сравнении с какими ООП языками? Каким образом происходит сравнение — по какой методике, чем измерим интервал между ООП и не ООП языком и на какой оси? ВСе очень туманно, определение ставит много вопросов и не дает совсем никаких ответов. Простите, но я ничего в нем не понял.
Я считаю, что C не считается ООП потому, что в нем нет объектов как FCO. Все.

E>Точно так же я смотрю и на функциональное программирование. Ключевым моментом в котором для меня является неизменяемость данных. Данные не изменяются и это делает возможным такие замечательные вещи, как прозрачный параллелизм без лишних синхронизаций, упрощенное тестирование, возможность при отладке возвращаться на произвольное число шагов (однако, лучше заглянуть сюда
Автор(ы): Вячеслав Ахмечет
Дата: 16.09.2006
Данная статья достаточно кратко и вполне доступно, используя примеры на Java (!), знакомит читателя с базовыми понятиями функционального программирования.
).


Это только для случая полной чистоты в смысле отсутствия сайд эффектов. Т.е. речь о чистых функциональных языках. Неизменяемые данные (наряду с изменяемыми) же поддерживаются и в нефункциональных языках — просто передаете интефейс только для чтения и все. Каким образом это обязательно для ФЯ непонятно.

E>Но для того, чтобы поддерживать иммутабельность данных, язык должен предоставлять разработчику ряд специальных средств. Среди которых нужно выделить такие, как:


E>хвостовая рекурсия, которая позволяет выражать циклы без использования переменных цикла.


В смысле, гарантированная раскрутка хвостовой рекурсии? Во-первых, это вопрос реализации. Который не имеет отношения к языку. Во-вторых, в ФП это плохой стиль. Что, кстати, хорошо видно по громоздкости кода. В таких случаях пользуются стандартными функциями высшего порядка вроде map, fold, etc. А как map реализован внутри не обязано никого волновать.

E>иммутабельность данных,

E>E>Отдельно стоит сказать еще и о паттерн-матчинге. На мой взгляд, это не обязательная фича для функциональных языков.

Если эта фича даже по вашему мнению не обязательна для функционального языка, то непонятно, зачем вообще о ней вспоминать? Я ведь не про удобство языка Nice говорил. Удобство — разговор отдельный, я полностью согласен с тем, что раскрутка хвостовой рекурсии, иммутабельность данных, PM и прочее — это очень удобно. Мы -то говорим о классификации языков безотносительно их удобства. По крайней мере, я так думал.

E>В отсутствии всего вышеперечисленного программирование на Nice в функциональном стиле, наверное, возможно. Но, как и с ООП в языке C, это будет слишком трудоемко по сравнению с действительно функциональными языками.

E>Не думаю, что я удовлетворил вашу потребность в определении функционального языка. Но надеюсь, что я объяснил причины, по которым я не причисляю Nice к функциональным языкам.

Да, мне кажется я понял. В данном случае Nice не функциональный язык в таком же точно смысле, в каком курица — не птица, а Болгария — не заграница.

E>Недостатком вашего определения является его поверхностность.


Непонятно, что в данном случае означает "поверхностность"? В моем определении как раз только самая суть очищенная от всего наносного.

E>Под него, по большому счету, не только D, но и C попадает.


Похоже, вы не поняли мое определение.

E>Т.к. в C указателями на функции можно манипулировать так же, как и экземплярами любых других данных.


Действительно, не поняли. Функция в C не является первоклассным объектом. Указатель — является. Но вы, конечно, можете попробовать открыть для меня глубины C, продемонстрировав код на C соответствующий моему коду на Nice. Будет очень интересно.
... << RSDN@Home 1.2.0 alpha rev. 774>>
'You may call it "nonsense" if you like, but I'VE heard nonsense, compared with which that would be as sensible as a dictionary!' (c) Lewis Carroll
Re[9]: Функциональный/нефункциональный
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 06.02.08 13:14
Оценка:
Здравствуйте, Klapaucius, Вы писали:

E>>Не думаю, что я удовлетворил вашу потребность в определении функционального языка. Но надеюсь, что я объяснил причины, по которым я не причисляю Nice к функциональным языкам.


K>Да, мне кажется я понял. В данном случае Nice не функциональный язык в таком же точно смысле, в каком курица — не птица, а Болгария — не заграница.


Вы выбрали неподходящий объект для упражнений в остроумии.


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[10]: Функциональный/нефункциональный
От: Klapaucius  
Дата: 06.02.08 13:30
Оценка: +1 :))
Здравствуйте, eao197, Вы писали:

E>Вы выбрали неподходящий объект для упражнений в остроумии.


Не могу с Вами согласиться. Объект для упражнений в остроумии вполне подходящий. Получил огромное удовольствие от разговора, спасибо.
... << RSDN@Home 1.2.0 alpha rev. 774>>
'You may call it "nonsense" if you like, but I'VE heard nonsense, compared with which that would be as sensible as a dictionary!' (c) Lewis Carroll
Re[11]: Функциональный/нефункциональный
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 06.02.08 13:33
Оценка: :)
Здравствуйте, Klapaucius, Вы писали:

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


E>>Вы выбрали неподходящий объект для упражнений в остроумии.


K>Не могу с Вами согласиться. Объект для упражнений в остроумии вполне подходящий. Получил огромное удовольствие от разговора, спасибо.


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


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[9]: Функциональный/нефункциональный
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 06.02.08 13:51
Оценка:
Здравствуйте, Klapaucius, Вы писали:

K>Мы -то говорим о классификации языков безотносительно их удобства. По крайней мере, я так думал.


Вы ошиблись, я не говорил об абстрактной классификации языков. Я говорил о возможности программирования на языке в функциональном стиле, поскольку меня интересует практика.

E>>Недостатком вашего определения является его поверхностность.


K>Непонятно, что в данном случае означает "поверхностность"? В моем определении как раз только самая суть очищенная от всего наносного.


Благодоря этой очишенной сути функциональными становятся такие языки как D, C# (начиная, если не ошибаюсь, с 1.0), Ruby, SmallTalk, Eiffel. А это противоречит моему ощущению реальности.


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[9]: Функциональный/нефункциональный
От: Left2 Украина  
Дата: 06.02.08 13:51
Оценка: +1 :)
E>>Т.к. в C указателями на функции можно манипулировать так же, как и экземплярами любых других данных.
K>Действительно, не поняли. Функция в C не является первоклассным объектом. Указатель — является. Но вы, конечно, можете попробовать открыть для меня глубины C, продемонстрировав код на C соответствующий моему коду на Nice. Будет очень интересно.
А какая разница является first-class object указатель на функцию или сама функция? Концепция указателей насколько я понимаю вообще ортогональна функциональным/императивным языкам. Я вот нутром чую что C язык не функциональный, но наличие указателей на функцию меня сильно смущает когда пытаешься обьяснить почему
... << RSDN@Home 1.2.0 alpha rev. 717>>
Re[10]: Функциональный/нефункциональный
От: Трурль  
Дата: 06.02.08 19:50
Оценка: -1
Здравствуйте, eao197, Вы писали:

K>>Непонятно, что в данном случае означает "поверхностность"? В моем определении как раз только самая суть очищенная от всего наносного.


E>Благодоря этой очишенной сути функциональными становятся такие языки как D, C# (начиная, если не ошибаюсь, с 1.0), Ruby, SmallTalk, Eiffel. А это противоречит моему ощущению реальности.


А также такие как Forth, Algol-68 и CPL. Что касается последнего, то причисление к лику функциональных языка, введшего в обиход такое понятие как L-value, мне лично кажется кощунственным.
С другой стороны, некоторые почитаемые среди функциональщиков языки, в частности FP потеряют свой статус. Загадочным с этой точки зрения представляется и несколько пренебрежительное отношение общественности к добавлению в Erlang функциональных объектов, которые, собственно, и превратили его в функциональный язык. (Интересно, каким он был до этого?)

Человек — двуногое без перьев (и с плоскими ногтями). Так, кажется звучит определение, очищенное от всего наносного?
Re[11]: Функциональный/нефункциональный
От: Курилка Россия http://kirya.narod.ru/
Дата: 06.02.08 19:55
Оценка:
Здравствуйте, Трурль, Вы писали:

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


K>>>Непонятно, что в данном случае означает "поверхностность"? В моем определении как раз только самая суть очищенная от всего наносного.


E>>Благодоря этой очишенной сути функциональными становятся такие языки как D, C# (начиная, если не ошибаюсь, с 1.0), Ruby, SmallTalk, Eiffel. А это противоречит моему ощущению реальности.


Т>А также такие как Forth, Algol-68 и CPL. Что касается последнего, то причисление к лику функциональных языка, введшего в обиход такое понятие как L-value, мне лично кажется кощунственным.

Т>С другой стороны, некоторые почитаемые среди функциональщиков языки, в частности FP потеряют свой статус. Загадочным с этой точки зрения представляется и несколько пренебрежительное отношение общественности к добавлению в Erlang функциональных объектов, которые, собственно, и превратили его в функциональный язык. (Интересно, каким он был до этого?)

Ну если вспомнить, что там был по сути Пролог, то был язык логического программирования + навороты для concurrency.
Re[10]: Функциональный/нефункциональный
От: Klapaucius  
Дата: 07.02.08 13:02
Оценка: 6 (2) +5
Здравствуйте, Left2, Вы писали:

L>А какая разница является first-class object указатель на функцию или сама функция? Концепция указателей насколько я понимаю вообще ортогональна функциональным/императивным языкам. Я вот нутром чую что C язык не функциональный, но наличие указателей на функцию меня сильно смущает когда пытаешься обьяснить почему


Потому, что можно указать только на уже имеющуюся функцию, а сконструировать ее во время выполнения программы — нельзя.
Если функции у нас не FCO, но есть указатели на функцию, то можно написать некоторые функции высшего порядка. А некоторые нельзя. Например map можно, а flip и curry — нет.

Тут
Автор: Klapaucius
Дата: 01.02.07
уже была год назад дискуссия на эту тему.
... << RSDN@Home 1.2.0 alpha rev. 774>>
'You may call it "nonsense" if you like, but I'VE heard nonsense, compared with which that would be as sensible as a dictionary!' (c) Lewis Carroll
Re[10]: Функциональный/нефункциональный
От: Klapaucius  
Дата: 07.02.08 13:02
Оценка:
Здравствуйте, eao197, Вы писали:

E>Вы ошиблись, я не говорил об абстрактной классификации языков. Я говорил о возможности программирования на языке в функциональном стиле, поскольку меня интересует практика.


Во первых, вы утверждали, что Scala от Nice отличается тем, что первый язык является функциональным, а второй — нет. Причем в контексте разговора весьма далекого от практики. Кроме того, возможность и удобство — разные вещи. Возможность я продемонстрировал, удобство — вопрос субъективный. Если ваша позиция только в том и заключается, что Nice — неудобный функциональный язык, то я с вами согласен.

E>Благодоря этой очишенной сути функциональными становятся


Не становятся, а соответствуют этому определению. Если соответствуют.

E>такие языки как D,


Об этом мы уже говорили.

E>C# (начиная, если не ошибаюсь, с 1.0),


Скорее с более поздних. Но тут все не совсем очевидно и мнения могут различаться. Все-таки MulticastDelegate — это не совсем функциональный тип. Например, все отображения из A в A' имеют один тип A -> A', а делегаты Foo<A, A'> и Bar<A, A'> — это разные типы. В стандартной библиотеке C# 3.0 появился набор "функциональных типов" сделанных на базе делегатов. А во времена C# 2.0 можно было написать свою ФВП, которая возвращала функцию типа MYFunc<T1, T2> и она не состыковывалась бы с ФВП из библиотеки Имярека, принимающей функцию типа Fn<T1, T2>

E>SmallTalk,


Хм... Я не могу похвастаться знанием смолтока, но всегда считал, что в нем нет никаких функций. А если функций нет, как-то даже странно рассуждать, являются ли они первоклассными или нет. В смолтоке есть блоки кода, это объект, содержащий параметризованный участок кода, который выполняется, когда объект получает сообщение value — мне приходилось слышать, что их сравнивают с лямбдами, но по-моему, семантика отличается, как в случае с ^, например.

E>Eiffel.


Не считаю себя компетентным в вопросах, касающихся Eiffel, но рискну предположить, что агенты Эйфеля ближе к блокам кода смолтока, чем к функциям. Это способ обернуть операции в объект. Грубо говоря — встроенная в язык легковесная возможность реализации паттерна стратегия.

Вообще же, было бы намного продуктивнее, если бы вы просто реализовали мой пример на Nice на этих языках, которые вы скорее всего знаете, и которые не знаю я.

E>А это противоречит моему ощущению реальности.


Не согласен с тем, что противоречие неформализованному ощущению реальности — это проблема определения.
Вообще чистые реализации одной парадигмы не так уж часто встречаются, большинство языков — мультипарадигменные в той или иной степени. Если какая-то возможность практически полезна, то даже в чистой реализации другой парадигмы может появиться конвергентная фича вроде смолтоковских блоков кода, например.
... << RSDN@Home 1.2.0 alpha rev. 774>>
'You may call it "nonsense" if you like, but I'VE heard nonsense, compared with which that would be as sensible as a dictionary!' (c) Lewis Carroll
Re[11]: Функциональный/нефункциональный
От: Klapaucius  
Дата: 07.02.08 13:02
Оценка:
Здравствуйте, Трурль, Вы писали:

Т>А также такие как Forth,


По моему скромному разумению, функция в Forth это еще более странно, чем функция в Smalltalk.

Т>Algol-68 и CPL. Что касается последнего, то причисление к лику функциональных языка, введшего в обиход такое понятие как L-value, мне лично кажется кощунственным.

Т>С другой стороны, некоторые почитаемые среди функциональщиков языки, в частности FP потеряют свой статус.

C такой эрудицией, конечно, не мне тягаться.

Т>Загадочным с этой точки зрения представляется и несколько пренебрежительное отношение общественности к добавлению в Erlang функциональных объектов, которые, собственно, и превратили его в функциональный язык. (Интересно, каким он был до этого?)


По моему, классифицировать гибрид Smalltalk-72 и Prolog вообще проблема нетривиальная.

Т>Человек — двуногое без перьев (и с плоскими ногтями). Так, кажется звучит определение, очищенное от всего наносного?


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

p.s. Нельзя ли все-таки прояснить ваше сообщение здесь
Автор: Трурль
Дата: 04.02.08
, а то я сколько голову не ломал — так и не понял, к чему это было сказано.
... << RSDN@Home 1.2.0 alpha rev. 774>>
'You may call it "nonsense" if you like, but I'VE heard nonsense, compared with which that would be as sensible as a dictionary!' (c) Lewis Carroll
Re[12]: Функциональный/нефункциональный
От: Курилка Россия http://kirya.narod.ru/
Дата: 07.02.08 13:31
Оценка:
Здравствуйте, Klapaucius, Вы писали:

K>Здравствуйте, Трурль, Вы писали:


Т>>Загадочным с этой точки зрения представляется и несколько пренебрежительное отношение общественности к добавлению в Erlang функциональных объектов, которые, собственно, и превратили его в функциональный язык. (Интересно, каким он был до этого?)


K>По моему, классифицировать гибрид Smalltalk-72 и Prolog вообще проблема нетривиальная.


Можно комментарий по поводу выделенного? Желательно с фактами?
Re[11]: Функциональный/нефункциональный
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 07.02.08 13:41
Оценка:
Здравствуйте, Klapaucius, Вы писали:

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


E>>Вы ошиблись, я не говорил об абстрактной классификации языков. Я говорил о возможности программирования на языке в функциональном стиле, поскольку меня интересует практика.


K>Во первых, вы утверждали, что Scala от Nice отличается тем, что первый язык является функциональным, а второй — нет. Причем в контексте разговора весьма далекого от практики.


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

K> Кроме того, возможность и удобство — разные вещи. Возможность я продемонстрировал, удобство — вопрос субъективный.


Удобство -- это как раз мера возможности на практике. Метапрограммирование на С++ возможно -- да, но неудобно. Настолько неудобно, что его применимость даже осознается далеко не всеми C++ разработчиками. В противовес этому есть Nemerle и Lisp, где метапрограммирование не только возможно, но и удобно.

E>>C# (начиная, если не ошибаюсь, с 1.0),


K>Скорее с более поздних. Но тут все не совсем очевидно и мнения могут различаться. Все-таки MulticastDelegate — это не совсем функциональный тип. Например, все отображения из A в A' имеют один тип A -> A', а делегаты Foo<A, A'> и Bar<A, A'> — это разные типы. В стандартной библиотеке C# 3.0 появился набор "функциональных типов" сделанных на базе делегатов. А во времена C# 2.0 можно было написать свою ФВП, которая возвращала функцию типа MYFunc<T1, T2> и она не состыковывалась бы с ФВП из библиотеки Имярека, принимающей функцию типа Fn<T1, T2>


В версии 1.0 можно было создавать делегаты для конкретных типов аргументов и возвращаемого значения. Т.е. можно было сделать curry для (int,int)->int отдельно, и curry для (float,float)->float отдельно. Но возможность сделать curry, в принципе, была.

E>>SmallTalk,


K>Хм... Я не могу похвастаться знанием смолтока, но всегда считал, что в нем нет никаких функций. А если функций нет, как-то даже странно рассуждать, являются ли они первоклассными или нет. В смолтоке есть блоки кода, это объект, содержащий параметризованный участок кода, который выполняется, когда объект получает сообщение value — мне приходилось слышать, что их сравнивают с лямбдами, но по-моему, семантика отличается, как в случае с ^, например.


В SmallTalk и Ruby блоки кода могут использоваться для реализации curry. Более того, где-то кто-то даже пытался писать книгу об программировании с использованием ФВП в Ruby на основе блоков кода Ruby.

E>>Eiffel.


K>Не считаю себя компетентным в вопросах, касающихся Eiffel, но рискну предположить, что агенты Эйфеля ближе к блокам кода смолтока, чем к функциям. Это способ обернуть операции в объект. Грубо говоря — встроенная в язык легковесная возможность реализации паттерна стратегия.


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

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


Eiffel-я, C# и SmallTalk у меня сейчас нет. О том, как реализовать curry на Ruby можно прочитать здесь.


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[2]: Функциональный/нефункциональный
От: VladD2 Российская Империя www.nemerle.org
Дата: 07.02.08 18:13
Оценка:
Здравствуйте, eao197, Вы писали:

E>Ну а паттерн-матчинг где?


Ой, значит это все что нужно чтобы язык был фунциональным? И значит Лисп который является родителем всех ФЯ вдруг становится не фунциональным?
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[10]: Функциональный/нефункциональный
От: VladD2 Российская Империя www.nemerle.org
Дата: 07.02.08 18:13
Оценка:
Здравствуйте, deniok, Вы писали:

D>В G-машине, как я понимаю, это так и будет в виде циклического thunk'а храниться — будет немножко больше косвенности при обращении к аргументам (разыменование указателей). Но это — небольшая плата за приспособление к фон-неймановской архитектуре


Большая. Хаскель это классно демонстрирует.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[6]: Функциональный/нефункциональный
От: VladD2 Российская Империя www.nemerle.org
Дата: 07.02.08 18:13
Оценка: +1
Здравствуйте, eao197, Вы писали:

K>>И как это будет выглядеть?


E>Чуть-чуть пострашнее, ...


Ё! Предлагаю сойтись на мнении, что Найс более фунциональный чем Ди, но менее чем "позиционируемые как ФЯ языки". ОК?

А вообще, и Ди и Найс и даже похожн Эфиль поддерживают ФП. Но конечно одни больше другие меньше. И Найс, похоже, выглядит в данном случае вполне себе неполохо.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[12]: Функциональный/нефункциональный
От: Klapaucius  
Дата: 07.02.08 20:33
Оценка:
Здравствуйте, eao197, Вы писали:

E>В версии 1.0 можно было создавать делегаты для конкретных типов аргументов и возвращаемого значения. Т.е. можно было сделать curry для (int,int)->int отдельно, и curry для (float,float)->float отдельно. Но возможность сделать curry, в принципе, была.


E>В SmallTalk и Ruby блоки кода могут использоваться для реализации curry. Более того, где-то кто-то даже пытался писать книгу об программировании с использованием ФВП в Ruby на основе блоков кода Ruby.


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

E>О том, как реализовать curry на Ruby можно прочитать здесь.

Да дело даже не в параметрическом полиморфизме, хотя carry только для int — это, конечно, анекдот.
C# 1.0 совершенно точно небыл языком с первоклассными функциями.
Нельзя было присвоить переменной функциональное значение.
// C# 1.0 - делегат создается явно
FuncType fvalue = new FuncType(Function);
// функция - гражданин второго сорта. Она унижена и прищемлена.

// С# 2.0 - делегат создается неявно
FuncType fvalue = Function;
// справедливость торжествует!

Нельзя было сконструировать функцию на месте. В C# 2.0 дела обстояли лучше.
// представляем анонимный метод(тм)!
FuncType fvalue = delegate(){return "я уродлив, но свое дело делаю";};


У Eiffel тоже первоклассных функций пока не видно.
class
  AGENT_PROVIDER
feature
  demo (i: INTEGER; s: STRING) is
    do
        -- тут что-то происходит
    end
end

class
  AGENT_CONSUMER
feature
  call_agent (a: PROCEDURE [ANY, TUPLE [INTEGER, STRING]]) is
    do
    -- хорошо видно, что агент это вовсе не функция - это класс
    -- с методом call
      a.call ( [0, "Hello, World"] )
    end
end

class
  APPLICATION
create
  make
feature
  make is
    local
      producer: AGENT_PROVIDER
      consumer: AGENT_CONSUMER
    do
      create producer
      create consumer
    -- а здесь мы наблюдаем, как функция (а точнее - метод) producer.demo
    -- явным образом оборачивается в класс - агент,
    -- становясь методом call этого класса.
      consumer.call_agent (agent producer.demo)
    end
end

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

Что касается смолтока — еще раз повторяю, если нет функций, то бессмысленно говорить о том, являются ли они первоклассными объектами.
Блок кода в Ruby тоже, насколько мне известно, является объектом с методом call, а вовсе не функцией.
Карринг же (вернее, как его называет автор, карринг для бедных) в Ruby, судя по всему, реализуется с помощью метапрограммирования, если я, конечно, правильно понял семантику define_method.
'You may call it "nonsense" if you like, but I'VE heard nonsense, compared with which that would be as sensible as a dictionary!' (c) Lewis Carroll
Re[13]: Функциональный/нефункциональный
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 08.02.08 05:53
Оценка: -1
Здравствуйте, Klapaucius, Вы писали:

K>Что касается смолтока — еще раз повторяю, если нет функций, то бессмысленно говорить о том, являются ли они первоклассными объектами.

K>Блок кода в Ruby тоже, насколько мне известно, является объектом с методом call, а вовсе не функцией.
K>Карринг же (вернее, как его называет автор, карринг для бедных) в Ruby, судя по всему, реализуется с помощью метапрограммирования, если я, конечно, правильно понял семантику define_method.

Т.е., все возражения против C#, Eiffel, SmallTalk и Ruby свелись к тому, что там делегаты/агенты/блоки кода не называются "функциями"?

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


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[14]: Функциональный/нефункциональный
От: Klapaucius  
Дата: 08.02.08 15:07
Оценка: +1 :))
Здравствуйте, eao197, Вы писали:

E>Т.е., все возражения против C#, Eiffel, SmallTalk и Ruby свелись к тому, что там делегаты/агенты/блоки кода не называются "функциями"?


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

E>Тогда предлагаю завершить бесполезный флейм, похоже, что каждый останется при своем.


Давно пора!
... << RSDN@Home 1.2.0 alpha rev. 726>>
'You may call it "nonsense" if you like, but I'VE heard nonsense, compared with which that would be as sensible as a dictionary!' (c) Lewis Carroll
Re[13]: Функциональный/нефункциональный
От: Klapaucius  
Дата: 08.02.08 15:07
Оценка:
Здравствуйте, Курилка, Вы писали:

K>>По моему, классифицировать гибрид Smalltalk-72 и Prolog вообще проблема нетривиальная.

К>Можно комментарий по поводу выделенного? Желательно с фактами?

Насколько я знаю, actor model выросла из идей, реализованных в Smalltalk-72.
... << RSDN@Home 1.2.0 alpha rev. 726>>
'You may call it "nonsense" if you like, but I'VE heard nonsense, compared with which that would be as sensible as a dictionary!' (c) Lewis Carroll
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.