LINUX.ORG.RU
ФорумTalks

лямбды в новых язычках - PR или реальные полезняшки?

 , ,


7

7

Народ, а поясните пожалуйста, что конкретно имеется ввиду, когда некто, описывая всякие плюшки новорожденного языка восторженно заявляет «там есть лямбды!».

Ну что есть lambda в каком-нибудь lisp я представляю и даже понимаю зачем оно и как им пользоваться. В lisp'е. А что имеется ввиду под «лямбдой» например, в C#?

Хотелось бы увидеть не только цитаты из википедии, а простенькие примеры того, как эта лямбда сильно упрощает жизнь, удобство даёт и всё такое. В виде примера кода, разумеется, с пояснениями почему тут именно лямбда крута и без неё некузяво.

Только чтобы это не было аналогом перлового однострочника типа

perl -e 'print sub{ $_[0] + $_[1]; }->(1,2)."\n";'
ибо в этом никаких новшеств и преимуществ нету.

Просто сдаётся мне что «лямбда» в нынешних сишарпах это пиарное название допотопных безымянных функций которые даже в перле есть и никаких новшеств в этом на самом деле нету.

★★★★★
Ответ на: комментарий от grim

И вот чего, сложно было с самого начала просто написать - «в C# лямбдой называются обычные безымянные функции, по возможностям от перловых, например, не отличаются.» И всё, вопрос исчерпан, никаких 10-тистраничных срачей и сёра кирпичами.

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

Stanson ★★★★★
() автор топика
Ответ на: комментарий от SlothSpot

У тебя там в коде опечатки, что как бы говорит о какчестве проекта.

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

Я не вижу в том коде никакого WOW;

В нем нет ничего необычного, я об этом несколько раз писал.
нужно было быстро сделать сравнение 2х 100мб XML файлов.
Никакого украшательства.
Просто сечас пишу проект на Java и ничего свежее нет.

но и называть их серебрянной пулей не стану;

Вы со мной соглашаетесь ? Cool!

что если нет лямбд - язык говно, тоже не стоит.

Я где-то так говорил?
Или вы опять со мной соглашаетесь?
Я говорил что лямбды в C# удобнее чем их зачатки в С и поэтому эльф не мог понять что в них хорошего, так как лямбды вроде есть, но толку от них мало.

Квалификацию мерять деньгами?

А чем ещё?
Могу местами где работал.

Хотя работающие за «миску риса» очень любят померяться и сделать их критерием успешности.

Как я сказал, меня устраивает сколько мне платят на фоне индустрии в целом и я считаю я это заслуживаю

Вас устраивает или считаете что недооценивают в материальном плане?

grim ★★☆☆
()
Ответ на: комментарий от Stanson

«в C# лямбдой называются обычные безымянные функции, по возможностям от перловых, например, не отличаются.»

Я так и писал, за исключением того что был неправ насчет closures.
Вы читать научитесь, прежде чем спорить.
Но лямбды в C# имеют гораздо более удобный синтаксис чем в Перл5 и поэтому применяются чаще.

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

Видимо мои простые ответы для вас, эльфов, слишком сложные.

grim ★★☆☆
()
Ответ на: комментарий от Stanson

Чо? «Найти»? Это getopt _НАЙТИ_? Это ж чо надо делать и насколько быть несведущим чтобы getopt ИСКАТЬ?

Ну, strtok вы же искали но не смогли найти описание, поэтому и написали только со второго раза.
Чем getopt лучше?
Как минимум применяется реже.

И эти люди мнят себя программистами? Мда.. Деградация просто поражает.

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

grim ★★☆☆
()
Ответ на: комментарий от grim

Я так и писал, за исключением того что был неправ насчет closures.

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

Видимо мои простые ответы для вас, эльфов, слишком сложные.

Почему-то на любой, даже самый идиотский вопрос, ну, скажем, «есть ли в телефоне Nokia N9 lisp искаропки?» я отвечаю «нет, но если надо то можно самому собрать и поставить» вместо того, чтобы расписывать, какой N9 расчудесный телефон, и что lisp не нужен.

Если вы считаете второй способ «ответа» на заданный кем-то вопрос человеческим, а первый эльфийским, то да, я тогда для вас эльф. И более того, не хочу иметь ничего общего с такими «человеками» как вы.

Stanson ★★★★★
() автор топика
Ответ на: комментарий от SlothSpot

Смотри, в 1.0 был формально указатель на функцию не имеющий плюсов над сишным, какой смысл о нем говорить как о чем-то очень важном?

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

Речь же шла о том, что С убог и нельзя на нем в лябмда калкулус

Зачем вы врете? Я ведь так не говрил.
Это вы из природной говнистости или тролите туповато?

grim ★★☆☆
()
Последнее исправление: grim (всего исправлений: 1)
Ответ на: комментарий от Stanson

Насколько надо быть тупым, чтобы не понимать

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

я тогда для вас эльф. И более того, не хочу иметь ничего общего с такими «человеками» как вы.

Я рад за вас, эльфов.
Надеюсь ещё порадоваться вашему смелому юмору!

grim ★★☆☆
()
Последнее исправление: grim (всего исправлений: 3)
Ответ на: комментарий от grim

Ну, strtok вы же искали но не смогли найти описание, поэтому и написали только со второго раза. Чем getopt лучше? Как минимум применяется реже.

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

Вы допускаете совершенно глупые ошибки, но даже не подозреваете об этом.

Первое. getopt применяется чаще чем strtok и является такой же функцией из стандартной библиотеки языка как собственно strtok, printf, atoi и пр. Для компиляции примера не надо указывать никаких дополнительных библиотек ни для printf, ни для getopt.

Второе. Разумеется я не держу в голове описания редко используемых функций, а именно strtok в данном примере редко применяемая функция.

Третье. Описание я не искал, его не надо искать, достаточно набрать man strtok. Мне было лень его читать и искать в нём как правильно юзать strtok.

Четвёртое. Сомневаюсь, что вы без заглядывания в документацию способны правильно употребить какой-нибудь variable_x.RareMethod(x,y,z) или как оно там у вас называется.

Так что витамины с лекарствами нужны вам, а не мне. :).

Stanson ★★★★★
() автор топика
Ответ на: комментарий от grim

Вы ведь пишете эту тупизну на форум, на всеобщее осмеяние.

А вам не приходило в голову, что «писать что-то на форум» можно не только с целью «всеобщего осмеяния/одобрения/понтокидания/итд.»?

Мне вот абсолютно насрать, всеобще ли посетители данного форума осмеют, или только несколько, осмеют ли вообще и т.п.

Главное ответ на вопрос получен, а на остальное мне совершенно наплевать.

Stanson ★★★★★
() автор топика
Ответ на: комментарий от grim

Я рад за вас, эльфов. Надеюсь ещё порадоваться вашему смелому юмору!

Вы не понимаете одну простую вещь. В отличии от вас, для меня посетители форума не являются целевой аудиторией. Я лишь использую форум чтобы получить информацию. :)

Stanson ★★★★★
() автор топика
Ответ на: комментарий от geekless

Это ваше мнение. Всё что мне нужно было - я узнал. Чьё-либо мнение об этом меня не интересует.

Stanson ★★★★★
() автор топика
Ответ на: комментарий от Stanson

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

Дадада
Вы как «спец по С» не смогли завершить код, так как не смогли.
LOL

Первое. getopt применяется чаще чем strtok

Это просто мегалол!
В большинстве проектов getopt вообще не применяется, а если и применили раз в одном месте в проекте из 10 человек, то никто на этот код кроме его создателя и не посмотрит.
Вы видимо С-шные однострочиники пишете, если у вас он чато применяется.

Вот так «специалист по С»!

Третье. Описание я не искал, его не надо искать, достаточно набрать man strtok. Мне было лень его читать и искать в нём как правильно юзать strtok.

OMG!
Так вы даже CDT не смогли освоить?!
Я просто потрясен!

Считаю что вы достигли уровня Эльф-Шаман!

grim ★★☆☆
()
Ответ на: комментарий от Stanson

Главное ответ на вопрос получен

LOL
Вы же не дискутировать пришли а навязать своё мнение, при этом вы же ни в С ни в Perl не разбираетесь

grim ★★☆☆
()
Ответ на: комментарий от grim

В большинстве проектов getopt вообще не применяется, а если и применили раз в одном месте в проекте из 10 человек, то никто на этот код кроме его создателя и не посмотрит.

Это же просто праздник какой-то! :) :) :)

Stanson ★★★★★
() автор топика
Ответ на: комментарий от Stanson

Это ваше мнение. Всё что мне нужно было - я узнал. Чьё-либо мнение об этом меня не интересует.

А почему тогда препираетесь?

grim ★★☆☆
()
Ответ на: комментарий от Stanson

Это же просто праздник какой-то! :) :) :)

Да.
Учите С
А то как всю жизнь самородком и проходите.

grim ★★☆☆
()
Ответ на: комментарий от grim

Вы же не дискутировать пришли

Естественно. Я не собирался дискутировать.

а навязать своё мнение

Во-первых, повторю - я не рассматриваю посетителей лора как свою целевую аудиторию.

Во-вторых, скажу вам по большому секрету, что тут бессмысленно даже пытаться навязать своё мнение. Этого просто не получится сделать.

при этом вы же ни в С ни в Perl не разбираетесь

О как. А мужики-то не знают...

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

Stanson ★★★★★
() автор топика
Ответ на: комментарий от grim

А почему тогда препираетесь?

Потому что это забавно. Заодно у меня складывается мнение о любителях сисярпа.

Stanson ★★★★★
() автор топика
Ответ на: комментарий от Stanson

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

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

grim ★★☆☆
()
Ответ на: комментарий от Stanson

Потому что это забавно. Заодно у меня складывается мнение о любителях сисярпа.

Ох, как славно. Я вас забавляю а вы меня веселите

Да, ещё я на Java, Perl, C++, Scheme, Sql, Javascript,XSLT регулярно пишу, так что расширяйте круг оценок
На Java правда в последнее время больше всего.
ps
На С давненько не писал.

grim ★★☆☆
()
Последнее исправление: grim (всего исправлений: 3)
Ответ на: комментарий от Stanson

в C# лямбдой называются обычные безымянные функции, по возможностям от перловых, например, не отличаются

Минуточку. Не вы ли поставили вопрос как «а есть ли в новых языках ВОЛШЕБНЫЕ лямбда-функции, а не просто какие-то поганые анонимные замыкания»? После чего на протяжении девяти страниц у вас пытались выяснить, о каком волшебстве речь, а вы продолжали жечь на тему самомодифицирующегося кода и «указатель на функцию это же не настоящая функция, это всего лишь 64 байта, в нём нет той особой уличной магии, которая есть в функциях».

Xellos ★★★★★
()
Ответ на: комментарий от geekless

Главное ответ на вопрос получен

Но не понят.

Да всё он понял. Просто он в какой-то книжке начитался восторгов по поводу лямбд в шарпе, но понял это как наличие каких-то совершенно волшебных лямбд, у которых spellpower выше по сравнению с лисповыми. Дальше болезнь прогрессировала, появились функции, создаваемые в рантайме, самомодифицирующийся код, бездушные, я бы даже сказал совершенно бездуховные указатели на функции...

Но в конце концов ЛОР ему объяснил, что магии нет, Деда Мороза не существует, лисповая лямбда имеет не больше духа святого, чем сишный указатель на функцию...
Расстроился человек. Не каждый день крушение идеалов происходит.

Xellos ★★★★★
()
Последнее исправление: Xellos (всего исправлений: 1)

Самое интересное, что большинство отписавшихся не видит применимость лямбд дальше, чем в коллбаках и фильтрах.

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

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

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

Вот пример из далеких 80-х http://mitpress.mit.edu/sicp/full-text/book/book-Z-H-15.html#%_sec_2.2.4
В нем наглядно демонстрируется мощь функциональной декомпозиции решения с использованием лямбд и замыканий.

Ritmik
()
Ответ на: комментарий от Xellos

Синтаксис языка не позволяет объяснить этот способ вам

Согласен, но это на первый взляд. У схемы очень простой синтаксис, намного проще популярных сегодняшних языков. Изучается за один присест http://mitpress.mit.edu/sicp/full-text/book/book-Z-H-10.html#%_sec_1.1

Я, например, на схеме вообще ни строчки не писал, но при просмотре/чтении лекций проблем не испытывал.

Ritmik
()
Ответ на: комментарий от Ritmik

Т.е. функции можно использовать как данные. Но в отличии от простых данных, функции обладают своим поведением (алгоритм со своим замыканием). Благодаря чему можно реализовывать элегантные решения задач, для которых в императивном стиле потребовалось бы потратить больше сил и громозкого кода в ущерб читабельности.
Вот пример из далеких 80-х http://mitpress.mit.edu/sicp/full-text/book/book-Z-H-15.html#%_sec_2.2.4

Вместо кучи слов про поведение, мог бы просто сказать, что речь идёт о декларативном DSL под конкретную задачу. :} И в лиспе, и в руби такой подход применяется достаточно широко.

geekless ★★
()
Последнее исправление: geekless (всего исправлений: 2)
Ответ на: комментарий от Ritmik

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

((Людей пугают смайлики.))

geekless ★★
()
Ответ на: комментарий от geekless

Людей в данном случае пугает отсутствие синтаксиса. (слово слово(слово(слово(слово слово слово)))) это не синтаксис.

Xellos ★★★★★
()
Ответ на: комментарий от geekless

Тоже не синтаксис. Слова должны быть по возможности короткими. Скобки - по возможности разными. Желательно наличие знаков препинания, потому что они знаки препинания, блин, они сразу визуально разделяют текст!

Xellos ★★★★★
()
Ответ на: комментарий от Stanson

целевой аудиторией

OMG! Маркетологи в треде! Все в шредер!!

linuxnewb
()
Ответ на: комментарий от geekless

Ехать. Но хотелось бы не на такой машине, где все органы управления выглядят как кнопки одного размера и цвета. ВСЕ, в том числе руль, передачи, газ и тормоз.

Xellos ★★★★★
()
Ответ на: комментарий от Xellos

Но хотелось бы не на такой машине, где все органы управления выглядят как кнопки одного размера и цвета.

Возьми racket, он позволяет использовать разные скобочки :)

theNamelessOne ★★★★★
()
Ответ на: комментарий от geekless

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

Если перечитать текст? Я описал механизм и что он открывает возможности. А как его использовать, для «декларативного DSL» или чего еще, это другой вопрос.

Ritmik
()
Ответ на: комментарий от geekless

((Людей пугают смайлики.))

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

Ritmik
()
Ответ на: комментарий от SlothSpot

LINQ по сути своей - сахар на тему map/ fold/filter/sort/etc.

Нет. Еще раз: LINQ - это анализ и преобразование AST (с использованием библиотечного API компилятора). Если это сахар, то Си - сахар к ассемблеру.

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

LINQ по сути своей - сахар на тему map/ fold/filter/sort/etc.

Нет. Еще раз: LINQ - это анализ и преобразование AST (с использованием библиотечного API компилятора). Если это сахар, то Си - сахар к ассемблеру.

Как страшно звучит. Давайте проверим. Пишем макрос

(defmacro from [var in col where filter-fn select select-fn]
  `(map (fn [~var] ~select-fn)
        (filter (fn [~var] ~filter-fn) ~col)))

Проверяем:

(from str :in ["output=hello" "input=other" "output=world"]
      :where (.startsWith str "output=")
      :select (.substring str (count "output="))

дает

("hello" "world")

Работает. Что доказывает утверждение, что «LINQ по сути своей - сахар на тему map/ fold/filter/sort/etc».

Часто замечаю, чем примитивнее язык, тем страшнее и круче там объясняются простые вещи.

Ritmik
()
Ответ на: комментарий от Xellos

Слова должны быть по возможности короткими. Скобки - по возможности разными. Желательно наличие знаков препинания, потому что они знаки препинания, блин, они сразу визуально разделяют текст!

Ты не можете утверждать объективно, что «должно», а что «не должно». У тебя должен быть опыт использования обоих видов синтаксиса (c/c++/java/c# подобного и лисп подобного) для объективного сравнения.

Ritmik
()
Ответ на: комментарий от Reset

давай осиливай, мозг надо развивать, а то так и будешь тупым

можно подумать, кроме трёпа здесь есть что-то умное. Как всегда - неосиляторы не осилили императивное программирование, и тащат функциональщину.

drBatty ★★
()
Ответ на: комментарий от Ritmik

LINQ - это анализ и преобразование AST (с использованием библиотечного API компилятора)

трехстрочный макрос

Апплодирую стоя.

geekless ★★
()
Ответ на: комментарий от drBatty

Как всегда - неосиляторы не осилили функциональное программирование и тащат императивщину.

Очевидное исправление троллинга на нетроллинг.

geekless ★★
()
Ответ на: комментарий от geekless

Очевидное исправление троллинга на нетроллинг.

причём тут это? Мне тут ещё никто так и не объяснил, на кой хрен нужны лямбды в императивных ЯП? Ну ты-то хоть осилил? Рассказывай. Или тоже неосилятор как я?

drBatty ★★
()
Ответ на: комментарий от drBatty

Мне тут ещё никто так и не объяснил, на кой хрен нужны лямбды в императивных ЯП?

Потому что ФП и метапрограммирование рулят, позволяя писать простой и понятный код максимально в терминах решаемой задачи, а императивщина сосёт.

geekless ★★
()
Ответ на: комментарий от drBatty

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

vertexua ★★★★★
()
Ответ на: комментарий от geekless

Потому что ФП и метапрограммирование рулят, позволяя писать простой и понятный код максимально в терминах решаемой задачи, а императивщина сосёт.

очень хорошо - CL в зубы - и вперёд. Особо упоротые фанаты венды могут юзать F#. Что ж вы в сишечку с плюсами лезете?

drBatty ★★
()
Ответ на: комментарий от vertexua

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

а что, за ФП теперь расстреливают? или ЯП не осталось кроме сишарпа и C++?

drBatty ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.