Re[11]: Мелкий холиварчик Nemerle vs. F#
От: dsorokin Россия  
Дата: 22.05.11 05:45
Оценка:
Здравствуйте, WolfHound, Вы писали:

WH>Здесь нет ООП.

WH>Здесь использована мегафича "extension method".
WH>Так что это все статические функции просто их вызов выглядит как вызов методов.

Тогда просто расширение ООП.
Re[11]: Мелкий холиварчик Nemerle vs. F#
От: dsorokin Россия  
Дата: 22.05.11 05:49
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>1. С каких пор ООП стал плох? Если он дает результат лучше чем ФП, то не фига совать ФП куда попало. А ООП тут не причем.

VD>2. Тут может не быть ни грамма ООП. Все эти вызовы могут быть методами расширениями которые по факту прост статическая функция.

Старею, наверное. Есть какое-то разочарование в ООП после долгого, очень долгого использования
Re[12]: Мелкий холиварчик Nemerle vs. F#
От: WolfHound  
Дата: 22.05.11 07:01
Оценка:
Здравствуйте, dsorokin, Вы писали:

D>Тогда просто расширение ООП.

Какое ООП? Какое расширение?
Этот код идентичен твоему с точностью до синтаксиса.
... << RSDN@Home 1.2.0 alpha 4 rev. 1472>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[13]: Мелкий холиварчик Nemerle vs. F#
От: dsorokin Россия  
Дата: 22.05.11 07:20
Оценка:
Здравствуйте, WolfHound, Вы писали:

WH>Этот код идентичен твоему с точностью до синтаксиса.


Да не идентичен он. Похож, но не идентичен.
Re[14]: Мелкий холиварчик Nemerle vs. F#
От: Jack128  
Дата: 22.05.11 07:22
Оценка:
Здравствуйте, dsorokin, Вы писали:

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


WH>>Этот код идентичен твоему с точностью до синтаксиса.


D>Да не идентичен он. Похож, но не идентичен.


и в чем отличия???
Re[11]: Мелкий холиварчик Nemerle vs. F#
От: Воронков Василий Россия  
Дата: 22.05.11 07:47
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Здравствуйте, Воронков Василий, Вы писали:


ВВ>>Можем:


ВВ>>
ВВ>>sum x y z = x+y+z

ВВ>>sum2 = sum 5 2
ВВ>>


VD>Ты вот это повтори:

VD>
VD>f(_, 1, _, "a", _)
VD>


Не касаясь вопроса, что же это за реальный сценарий такой, я написал бы это так:

f2 x y z = f x 1 y "a" z


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

ВВ>>
ВВ>>flip f x y = f y x
ВВ>>div x y = x / y
ВВ>>flip div 2
ВВ>>

VD>flip только переворачивает параметры. А что будешь делать если параметров много и все он "неправильно" расположены?

Перепишу функцию?
Ты знаешь если в языке все функции каррированные, то наверное не стоит параметры располагать в неправильном порядке.

ВВ>>И, кстати, зачем располагать параметры в "неправильном" порядке?

VD>Дык в кавычках оно потому, что это ничего неправильного нет. То что что-то не подходит для вашей теории еще не делает это что-то неправильным.

В рамках "нашего" языка — делает.

ВВ>>
ВВ>>int sum(int x, int y) {
ВВ>>  return x + y;
ВВ>>}

ВВ>>int sum5(int x) {
ВВ>>  return sum(5, x);
ВВ>>}
ВВ>>


ВВ>>Это — частичное применение. Аналогично и:

VD>Это не частичное применение. Это обявление новой функции. А твои слова действительно глупость.

Результатом частичного применения функции является, как это не странно, функция. И частичное применение как раз и представляет собой создание новой функции. В самом базовом виде частичное применение — это как раз и есть то, что я указал выше. У тебя же почему-то вбилось в мозг, что частичное применение — это оператор (_).

Оператор (_) это просто синтаксис такой для поинт-фри объявления функций. Попробуй подумать и сказать, почему ты считаешь, что следующее:

def f = _+_


это частичное применение. (Где здесь применение-то?) А вот такое:

f = \x y -> x + y


Ни фига не частичное применение.
Подумай действительно, чем эти два примера на самом деле отличаются.

VD>Если же тебя устраивает такое "частичное применение", то не фига вести разговоры о каких-то высших материях. То что тебя устраивает было в C. А стало быть карринг вообще никому не нужен.


Я тебе не говорю, что "меня устраивает". Я тебе пытаюсь объяснить, что такое частичное применение. Ибо блин год назад говорили о том же самом, а воз и ныне там

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

VD>Супер! Рекурсивное отрицание! Такого я еще не видел. Ну, это ладно...

Ты точно все целиком прочитал?

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

VD>
VD>Func<int,int> sum = x => y => sum(x, y);
VD>


Формулировка данная тобой — бред. Каррированная функция — это функция вида a->b->c вместо (a*b)->c. И соответственно каррированние — это если хочешь *способ* написания лямбд.
И тебе уже сто раз говорилось, что каррированную функцию можно написать на любом языке, где есть замыкания. То, что ты привел выше — это каррированная функция.

VD>Ну, чё? Как будель со своей же демагогией бороться?

ВВ>>Каррирование так же ортогонально частичному применению.
VD>Ты у что под вумным словом "ортогонально" имел в виду? Если "равнозначен", то ты очередной раз бредишь, так как примеры которые невозможно повторить с помощью каринга тебе приводили в изобилии.

Посмотри в словаре, выучишь еще одно "вумное" слово. Впрочем, тебе по ходу необзязательно знать смысл термина, чтобы его употреблять.
"Ортогонально" означает, что прямого отношения не имеет.

VD>Я повторяю последний раз. Карринг является разновидностью частичного применения. Но не наоборот. Потрудись опровергнуть это утверждение, или согласись с ним и перестань постоянно повторять ту ересь что ты несешь с завидной регулярность. Достал уже.


Я очень надеюсь, что ты "повторяешь" это действительно в последний раз. Потому что это — чушь. Изволь все-таки действительно разобраться в том, что такое каррирование и частичное применение. Я повторяю — каррирование используется в некоторых языках, чтобы в первую очередь имитировать функции с несколькими аргументами.
Вот, почитай: http://blogs.msdn.com/b/vorov/archive/2011/04/19/10155122.aspx

ВВ>>Сколько лет тут были ML-и, появился Немерле (ну да, Скала в начале), и теперь ML-ный подход "имеет право на существование".

VD>Дык если ML удовлетворял бы людей, то Скала и Немерл не появились бы вовсе. А они вот появились и как не странно набирают все больше и больше сторонников. А вот ML которому в этом году 40 лет исполняется (если не ошибаюсь) даже с протекцией МС не может завоевать предпочтение программистов.

У Немерла тоже с этим не очень, правда? Об F# хотя бы говорят. Притом что как язык он не просто вторичен по самое не могу, а во многом даже утратил преимущества своего прямого прародителя. А на OCaml кстати вполне себе пишут.

VD>В общем, я не хочу спорить на негативные темы. Я уже говорил, что подход ML имеет право на существование. Но это дизайнерский выбор, а не единственный true way. Со своими преимуществами и недостатками. Жить без него можно не испытывая никаких проблем. Те же задачи решаются другими способами. Зато отказ от этого решения дает главный бенефит — возможность не ломать привычки тем кто использовал скобочную нотацию для описания и применения функций с четвертого класса школы.


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

VD>На мой взгляд этот аргумент перевешивает все. А уж если быть не предвзятым, то придется признать, что перевешивать особо то и нечего. Так о чем тут ведется речь?

VD>>>Но утверждать, что вот карринг руль, а частичное применение сакс (или наоборот) — это глупо. Вы, тем самым, подменяете свои предпочтения разговорами о какой-то эфемерной правильности. Меж тем правильно и то, и другое. Это не ошибка дизайна, а всего лишь выбор дизайнеров.
ВВ>>Однако вы именно это и утверждаете. Заметь, все высказывания вашего лагеря сводятся к "ХХХ не нужен, ведь этого нет в Немерле".
VD>Что? Можно процитировать где я утверждал что-то подобное? Не говоря уже об "этом".

Вульфхаунд говорил в этой теме.
Re[11]: Мелкий холиварчик Nemerle vs. F#
От: Воронков Василий Россия  
Дата: 22.05.11 07:48
Оценка: +1
Здравствуйте, VladD2, Вы писали:

ВВ>>Зато превращает их в набор "звездочек". В чем проблема-то?

VD>Потере информации и понятности. Звездочки сразу дают понять где у нас параметры функции, а где мы функцию в качестве параметра передаем. Стрелочки же делают код обфускированным.

В языках типа ML такой проблемы нет. Все функции принимают один параметр, несколько параметров имитируются через каррирование. Вопрос "где мы функцию в качестве параметра передаем" просто не имеет смысла
Re[12]: Мелкий холиварчик Nemerle vs. F#
От: Аноним  
Дата: 22.05.11 08:02
Оценка:
немного не в тему. А что означает стрикт в описании языка ела
Re[12]: Мелкий холиварчик Nemerle vs. F#
От: dsorokin Россия  
Дата: 22.05.11 08:31
Оценка:
Здравствуйте, Воронков Василий, Вы писали:

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


В F# принято к случаю каррирования относить то, что я привел в виде куска кода выше. Книга Programming F#. Нет ничего хуже, чем спор о терминах.
Re[12]: Мелкий холиварчик Nemerle vs. F#
От: VladD2 Российская Империя www.nemerle.org
Дата: 22.05.11 10:12
Оценка: :)
Здравствуйте, Воронков Василий, Вы писали:

ВВ>я написал бы это так:


ВВ>
ВВ>f2 x y z = f x 1 y "a" z
ВВ>


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

Меня твоя демагогия уже достала. В следующий раз когда ты попытаешься поднять тему (или влезть в имеющуюся) крринга на этом форуме я тебе забнаю за офтоп и флуд. Не обессудь. Все что мог ты сказал. Нет аргументов, не разводи флуд.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[12]: Мелкий холиварчик Nemerle vs. F#
От: VladD2 Российская Империя www.nemerle.org
Дата: 22.05.11 10:14
Оценка: -1
Здравствуйте, Воронков Василий, Вы писали:

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


Вот и пользуйся этим достижением в одиночистве. А здесь форум языка где подобные достижения человечества считаются извращениями.

ЗЫ

Закрыли тему.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[13]: Мелкий холиварчик Nemerle vs. F#
От: Воронков Василий Россия  
Дата: 22.05.11 11:57
Оценка:
Здравствуйте, dsorokin, Вы писали:

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

D>В F# принято к случаю каррирования относить то, что я привел в виде куска кода выше. Книга Programming F#. Нет ничего хуже, чем спор о терминах.

Не мог бы уточнить, о каком примере речь?
Re[13]: Мелкий холиварчик Nemerle vs. F#
От: Воронков Василий Россия  
Дата: 22.05.11 12:00
Оценка:
Здравствуйте, Аноним, Вы писали:

А>немного не в тему. А что означает стрикт в описании языка ела


Strict or eager evaluation
Re[13]: Мелкий холиварчик Nemerle vs. F#
От: Воронков Василий Россия  
Дата: 22.05.11 12:06
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Пожалуй на этом закончим. Ты полностью доказал, что в языках где есть функции карринг не нужен.

VD>Меня твоя демагогия уже достала. В следующий раз когда ты попытаешься поднять тему (или влезть в имеющуюся) крринга на этом форуме я тебе забнаю за офтоп и флуд. Не обессудь. Все что мог ты сказал. Нет аргументов, не разводи флуд.

Ты это, занеси ветку в мемориз. Сколько там тебе времени потребовалось, чтобы понять "великие" истины вроде "тайпклассы — это не ООП"? Посмотрим, когда ты наконец соблаговолишь и здесь потратить полчасика на прочтение короткой обзорной статейки.
Re[3]: Мелкий холиварчик Nemerle vs. F#
От: Lucax  
Дата: 22.05.11 14:16
Оценка:
IT>>Там надо регистрироваться — фсат!

VD>Согласен. Странное ограничения для ресурса который хочет раскрутиться на флэймовых темах.


Сами понимаете — регистрация не прихоть, а средство защиты от спама. Так же доступен OpenID.
P.S. теперь региться не нужно.
Re[4]: Мелкий холиварчик Nemerle vs. F#
От: Jack128  
Дата: 22.05.11 14:19
Оценка:
Здравствуйте, Lucax, Вы писали:

IT>>>Там надо регистрироваться — фсат!


VD>>Согласен. Странное ограничения для ресурса который хочет раскрутиться на флэймовых темах.


L>Сами понимаете — регистрация не прихоть, а средство защиты от спама. Так же доступен OpenID.

L>P.S. теперь региться не нужно.

э-э-э, а капча не катит?
Re[5]: Мелкий холиварчик Nemerle vs. F#
От: Lucax  
Дата: 22.05.11 14:35
Оценка:
Здравствуйте, Jack128, Вы писали:

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


IT>>>>Там надо регистрироваться — фсат!


VD>>>Согласен. Странное ограничения для ресурса который хочет раскрутиться на флэймовых темах.


L>>Сами понимаете — регистрация не прихоть, а средство защиты от спама. Так же доступен OpenID.

L>>P.S. теперь региться не нужно.

J>э-э-э, а капча не катит?


Сложную капчу я считаю издевательством над пользователем, а простую роботы обходят элементарно. Надо подумать как использование OpenID максимально упростить... пока очевидно его не замечают...
Re[6]: Мелкий холиварчик Nemerle vs. F#
От: Jack128  
Дата: 22.05.11 14:51
Оценка:
Здравствуйте, Lucax, Вы писали:

L>Надо подумать как использование OpenID максимально упростить... пока очевидно его не замечают...


совместить вход на ресурс с ответом на сообщение?? Ну типа если человек еще НЕ зашел на ресурс, то рядом с полем ответ добавить поле "OpenID" и когда человек ответил в тему — он автоматом зашел. Ну вобщем как тут, на rsdn сделано.
Re[14]: Мелкий холиварчик Nemerle vs. F#
От: dsorokin Россия  
Дата: 22.05.11 14:59
Оценка:
Здравствуйте, Воронков Василий, Вы писали:

ВВ>Не мог бы уточнить, о каком примере речь?


Мое сообщение выше по треду с Observable. В книге Programming F# другой, но похожий пример.
Re[10]: Мелкий холиварчик Nemerle vs. F#
От: catbert  
Дата: 22.05.11 16:57
Оценка:
Здравствуйте, Воронков Василий, Вы писали:

ВВ>Зато превращает их в набор "звездочек". В чем проблема-то?


В том, что читать звездочки проще чем стрелочки, потому что стрелочки правоассоциативны, а звездочки симметричны по ассоциативности.

ВВ>Честно говоря, впервые слышу такое мнение.


Пол Грэхем — известный лиспер, который часто пишет мудрые вещи про программирование, в том числе и про парадокс Блаба. Вот что он пишет про ламбда-функции в контексте своего языка Arc:

In The Periodic Table, Primo Levi tells a story that happened when he was working in a varnish factory. He was a chemist, and he was fascinated by the fact that the varnish recipe included a raw onion. What could it be for? No one knew; it was just part of the recipe. So he investigated, and eventually discovered that they had started throwing the onion in years ago to test the temperature of the varnish: if it was hot enough, the onion would fry.

We're going to try not to include any onions in Arc. Everything is open to question. For example, in Arc, lambda is called fn. This idea appalled me at first, but it seemed like fn would be shorter and at least as expressive. What if I was just used to lambda? So, with a queasy sense of duty, I decided to try it. And after a few days I actually liked fn better. Now it seems clear to me that lambda is an onion: Alonzo Church himself wouldn't have used it if he had to write out the word lambda each time.

http://www.paulgraham.com/arcll1.html

В языке Arc также нету карринга, а есть немерловые "плейсхолдеры". Мне кажется, причины все те же — карринг лишь традиция, и Грэхему это понятно.

ВВ>Обычно функция пишется в расчете на то, что будет фиксировать именно первый аргумент. Ну в конце концов можешь флипнуть ее. Хотя в реальности flip нужен не так уж и часто.


Функции в .NET не пишутся в расчете на это. Немерле работает с .NET и это много в чем определяет его дизайн.

ВВ>Непонятно, зачем вообще расставлять скобки. Можешь объяснить, зачем ты это делаешь?


Чтобы понять тип функции. Функция фолд принимает комбинатор, сид и список, и возвращает аккумулятор. Если читать, как я обычно читаю (слева направо), то выйдет, что фолд принимает комбинатор, и возвращает функцию которая принимает сид и возвращает функцию, которая принимает список, и возвращает аккумулятор.

Это может и правильно в мире хаскелла, но в мире .НЕТа все наоборот. Зачем извращатся? Для самой возможности карринга? Нет, спасибо.

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


Именно так. Но библиотеки Немерла написаны так, что такие примерчики в реальном коде попадаются часто.

ВВ>И заметь, я ничего плохого об операторе (_) не говорил. А лишь поддался на очередную провокацию от Немерлианцев в стиле "ХХХ не нужен".


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