LINUX.ORG.RU
ФорумTalks

Лямбда-выражения для идиота


2

5

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

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

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

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

Обычно так исходятся на гавно ниасиляторы даже геометрических аналогий.

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

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

Казалось бы: как эта фраза:

привязка математических абстракций серьёзно влияет на качество исследований, причём не в лучшую сторону

относится к «геометрическим аналогиям»?

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

Я немного представляю, как строятся теории в физике и, хоть убей, не вижу смысла в этой фразе!

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

то же самое, только менее тривиальное, поэтому не видимое для «маляра», происходит и с более сложными вещами - сам себя обманул, это называется

теоретическая физика?

почитайте на досуге «Введение в теорию суперструн» М. Каку, и поищите там аналогии, «тысячи» их там :)

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

<У меня вопрос встал: а чем второй вариант лучше первого?

Вроде как лаконичнее... Некоторая автоматизация труда - типа как фоновое автодополнение кода ;) Но как утверждают «писать меньше» не у всех получается. Для «ынтерпрайзных» шарпистов - целый повод переписать проект с делегатов на лямбды и жутка гордицца «проделанной работой»... А так - крокодильи яйца в профиль.

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

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

Сам то ты (я готов поспорить) не въезжаешь даже в азы функуана, не отличишь B* от C*.

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

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

Обычно так исходятся на гавно ниасиляторы даже геометрических аналогий.

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

попробуй студентам неравенство Бесселя истолковать без привязки к векторам. Получишь поток импотентов с еще одной неусвоенной абракадаброй в голове.

толкуй, не толкуй, на выходе всё равно будет «поток импотентов с еще одной неусвоенной абракадаброй в голове», потом у тех кто _может_ из абракадабры народится новое знание, прочие же пойдут выполнять своё предназначение - штаны просиживать :)

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

> что Вы собрались там придумывать?

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


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

для домохозяйки ответ сгодится

Очень остроумно. Видимо, у вас совсем чсв зашкаливает.

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

>Да, но какова задача - такое и решение.

Правда чтоле? Я тебя список попросил отсартировать - атты оракл для этого поставил. Ты страшный человек.

Я не буду писать это всё на окамле, эрланге, лиспе, изобретая этот велосипед, потому что всем и так ясно - что это бред.


Я не просил тебя писать на окамле. Я просил тебя отсортировать список для демонстрации абстракции которая не понимаешь ты где. А ты подключил оракл для этого. Вот где бред.

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

главный по цитируемости математик России

Петрик, ты? :)

Углатываешься все фантиками каких-то заморских анонимных буквоедов с почти нулевым вкладом в новую науку.

это Вы про Митио Каку так сейчас мощно задвинули? ну-ну :)

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

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

>компараторов понаделать.

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

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

>одному из N потоков обслуживающих соединения. Чему должно быть равно N? Угадайте с трёх раз.

Ответ зависит от раскрытия смысла понятия «обслуживает».

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

> Я просил тебя отсортировать список для демонстрации абстракции которая не понимаешь ты где

Вы привели ещё один пример, подтверждающий, что лямбды не нужны, для этого есть БД (не обязательно оракл, можно мускл взять или скулайт - они быстрые). Я всё пытаюсь выпытать нормальный пример - но его нет. Это значит, что вы с лямбдами не работаете. Вы где-то как и я что-то вычитали, офигели, закрыли книжку, выпили чайку и пошли дальше решать свои насущные задачи. Вот об этом я и говорю.

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

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

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

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

> Ответ зависит от раскрытия смысла понятия «обслуживает».

Читает данные из коннекта, чё-то с ними делает (обрабатывает) - посылает ответ.

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

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

Нет пути! Сколько читал книг по мат. логике, все про это пишут.

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


Вот тут у нас, видимо, схожее мнение. Я терпеть не могу рисунки из учебников физики. Не все, конечно. Например, поля очень удобно изображать силовыми линиями.(эквипотенциальными линиями/поверхностями тоже) При этом, рисунок не вводит в заблуждение, т.к описывает мат. модель.

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

>>потом у тех кто _может_ из абракадабры народится новое знание

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

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

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

Не всегда I/O сводится к демону, слушающему порт. Вполне возможна ситуация, когда один поток считает, пока другой ждёт данные. И вот тут N может изменяться в широких пределах.

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

>Вы привели ещё один пример, подтверждающий, что лямбды не нужны, для этого есть БД

Для сортировки списков? Ты с дуба рухнул? Для того чтобы работала командочка ps - надо оракл ставить?

И второе - ты относилься к реляционной базе данных как к чему-то спущенному с неба? Это не программа которую кто-то написал? Как же этих людей....а - программисты!

Я всё пытаюсь выпытать нормальный пример - но его нет. Это значит, что вы с лямбдами не работаете.


Тут я рухнул напол.

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

>чё-то с ними делает (обрабатывает)

Если ты по таким параметрам способен дать ответ сколько это N - то тут остаетсятся только рухнуть на пол.

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

>>и что? насколько такое представление соответствует реальному положению дел?

И что? Для тяжелых ядер и внешних электронов вполне соответствует. Можно даже скорость вращения найти. Многие ей до сих пор оперируют.

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

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

более высокая чем что?

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

to mclaudt и shty:
Ладно, можете тут дальше разводить срач на пустом месте. А я пойду налью себе чаю, возьму тетрадку и буду читать книгу по классической теории рекурсивных функций.
Как раз остановился на лябда-исчислении. :)

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

> что Вы собрались там придумывать?

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

Мои знания про работу головного мозга очень поверхностные.

непонятно тогда зачем было упоминать о ней :)

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

хотел написать, два раза переписывал - не могу, надо доопределить предмет разговора :)

1. что мы назовём знанием
2. что назовём усвоением
3. надо определить какие степени различия множеств «имеющихся знаний» и «усвояемых знаний» будем использовать в наших рассудждениях, ибо, есть мнение, результат будет завсеть

> для домохозяйки ответ сгодится

Очень остроумно. Видимо, у вас совсем чсв зашкаливает.

я Вам намекнул, что Ваш ответ неточен по сути, при чём тут ЧСВ?

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

>> Как только в цикле появляются всякие вложенности, подциклы, if и т.д.

Это большая редкость и повод задуматься.


Так что же вас удерживает от столь важного шага? Задуматься... над тем что в эрланге вообще нет циклов, конструкцией if вообще не пользуются за ненадобностью.

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

>>про Митио Каку

При чем тут Каку?

я его тоже упоминал, он теперь навеки запятнан этим фактом :)

Я про авторов из твоего первого выхарча тут - Бурбаки.

ну, про Бурбаки, так про Бурбаки, хоть и не понимаю чем Вам не угодил сей милый и остроумный виртуал

Вы все же ответьте: в чём Ваш персональный вклад в фундаментальную науку, что Вы столь задорно поплёвываете в весьма уважаемых в научном мире людей, написавших больше научных работ, чем Вы постов на лоре?

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

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

Отсюда делаем вывод, что к науке ты не имеешь отношения (максимум Хокинга полистал)

я уже понял, скоропалительные выводы - Ваша стихия, там Вы себя по настоящему комфортно ощущаете, жаль только достоверность оных оставляет желать лучшего :)

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

>>потом у тех кто _может_ из абракадабры народится новое знание

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

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

Равно как и армии бездарей, способных максимум на перемусоливание формализма из методичек.

ну Вы-то не такой, Вы гораздо лучше

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

>>и что? насколько такое представление соответствует реальному положению дел?

И что? Для тяжелых ядер и внешних электронов вполне соответствует. Можно даже скорость вращения найти. Многие ей до сих пор оперируют.

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

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

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

Ибо ни про Бесселя, ни про отличие B* от C* мы от тебя так и не услышали. Чушь про электрон только сбрякнул да бульварным желтеньким Хокингом тряс-позорился.

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

Я цитировал Арнольда

какое достижение научной мысли, медаль-то хоть изготовили по случаю?

«армия бездарей, способных максимум на перемусоливание формализма из методичек» наступае!

//хорошо хоть не Шварценеггера

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

Хм, ну ладно, раз ps, вот это уже ближе к телу.

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


typedef struct Stru Stru;
struct Stru{
  char *sName;
  char *sEmail;
  int  nAge;
}

int ( * comparator ) ( const void *pA, const void * pB);

#define F(X) X
#define cmp_DECL(NAME, EXPRESS)  \
  int cmp_decl_ ## NAME( const void *pA, const void * pB){ \
    Comp p1 = ((Stru *)pA), p2 = ((Stru *)pB); \
    return (EXPRESS); \
  } \
  comparator g_cmp_ ## NAME = cmp_decl_ ## NAME

#define fCmp(NAME) g_cmp_ ## NAME


cmp_DECL(nAge, (p1->nAge - p2->nAge));

cmp_DECL(sName,  F(( strcmp(p1->sName,  p2->sName)  )) );
cmp_DECL(sEmail, F(( strcmp(p1->sEmail, p2->sEmail) )) );

//...
Stru aStru[];
//...
qsort ( aStru, N, sizeof(Stru), fCmp(nAge)   );
qsort ( aStru, N, sizeof(Stru), fCmp(sName)  );
qsort ( aStru, N, sizeof(Stru), fCmp(sEmail) );

За точность не ручаюсь, но.. И тут ремарочка: задача настолько редка (даже вы, адепты функциональщины, не с первого раза пример привели), что подобный синтаксис вполне допустим.

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

Спасибо за ссылку, просмотрел книгу.

Из введения:

Изложение опирается на интуитивное представление о вычислимых функциях

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


гм.. полная противоположность того, что я сейчас читаю.

А книга действительно достойная? Стоит ее смотреть подробнее?

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

> Так что же вас удерживает от столь важного шага? Задуматься... над тем что в эрланге вообще нет циклов, конструкцией if вообще не пользуются за ненадобностью.

Это повод задуматься о том, что не надо всю программу в одну функцию запихивать. Чуть ниже об этом сказано.

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

Пэтому если кто-то и должен предоставить пруфы своей состятельности, так это именно ты. Ибо ни про Бесселя, ни про отличие B* от C* мы от тебя так и не услышали.

«ой-ой-ой, тушоночная невеста нас всех тут разоблачила» (с)

Чушь про электрон только сбрякнул

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

да бульварным желтеньким Хокингом тряс-позорился.

нехорошо завидовать, ты сам-то и до такого не допёр пока ещё :)

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

> Если ты по таким параметрам способен дать ответ сколько это N - то тут остаетсятся только рухнуть на пол.

Что не так?

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

>for+if

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

И вот тут вернёмся к лямбдам, я так и не понял какие специфические для них проблемы они решают, да так что уделывают классические методы классов/функции, как компараторы уделывают for/if в вашей задаче?

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

Черт, я думал, ты стебешься, но ты реально ынтерпрайз-погромист O_o

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

shty, ведь действительно, есть модели, в которых даже атомы(sic!) - шарики. В термодинамике, например, когда-то давным-давно рассмотрение таких моделей привело к интересным выводам.(не надо только спрашивать к каким, не буду я в этом копаться сейчас)

mclaudt привел границы применимости модели:

Для тяжелых ядер и внешних электронов вполне соответствует


Почему нельзя в конкретной модели считать электроны шариками? (если «соответствует»)
Ведь границы применимости модели - одно из самых фундоментальных понятий в физике. Классический пример - разделение на классическую и релятивистскую механику.

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

лямбды не нужны, для этого есть БД

Ынтерпрайзненько. Вы не на джаве пишете случайно?

Я всё пытаюсь выпытать нормальный пример - но его нет

Особо не вникал в суть вашего с r спора, но постараюсь вам помочь с поиском примера для лямбд.

Задача: закешировать результат произвольного «тяжелого» участка кода произвольной длины и сложности. Кеш должен работать по ключам и позволять множественное кеширование одного участка кода для разных входных аргументов. Т.е. если есть «тяжелая» функция F(Х), где Х - аргумент, то кеш должен уметь кешировать все или необходимые результаты для любых значений А. И конечно же кеш вообще не должен перегружать код.

При использования лямбд эта задача решается элементарно: поднимается список/дерево кеша, а «тяжелый» код заворачивается в лямбду F без параметров. Ключ кеша - какой-то уникальный идентификатор и аргументы, влияющие на результат, т.е. {abcd, A}. Если по ключу в кеше ничего не найдено, то исполняется лямба, её значение сохраняется в кеш с ключом, и затем значение возвращается. Тоже будете использовать БД?

very_heavy_db_request(A) ->
    F = fun() -> [тяжелый код] end,
    mycache:memo(F, {very_heavy_db_request, A}).

Как видите, «тяжелый код» будет выполняться только один раз для одного значения А. Подобные задачи возникают постоянно на высоконагруженных веб-сервисах. Далее, если немного усложнить mycache можно поднять связанное кеширование (обнуление одного ключа вызывает обнуление зависимых ключей) и т.д.

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

> не надо всю программу в одну функцию запихивать

Угу. Это частая проблема императивщиков - боязнь перегрузить код, и не суметь на следующий день в нём разобраться.

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

>>Стоит ее смотреть подробнее?

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

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

> Вы не на джаве пишете случайно?

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

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

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

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

> Я цитировал Арнольда...

Не сотвори себе кумира.


Вообще как всегда любой категоричный подход неверен.

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

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

Во-вторых, разумеется, аналогии нужно применять с осторожностью, потому что если отойти чуть в сторону от школьного курса, обычная интуиция дает абсолютно неверные выводы. Попробуй примени интуицию попытавшись «представить себе две двумерные сферы трансверсально пересекающиеся по одной точке». Та интуиция, которую можно применять в науке, сильно отличается от бытовой. Её годами воспитывают в универе заставляя как раз строго(бурбакистски) доказывать все используемые факты.

Так что если вы со shty немного смените тон, то выясните, что не противоречите друг другу, просто говорите о двух сторонах одного комплексного подхода.

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