LINUX.ORG.RU
ФорумTalks

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

 , ,


7

7

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

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

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

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

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

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

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

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

Нет конечно, с чего бы? Тебе уже объяснили не раз, что лямбда тут не при чем.

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

Бред. Что еще за генератор функции?

Мля...

    (define (doubler f) (lambda (x) (f x x)))
    ((doubler +) 4)
    ((doubler *) 4)
    ((doubler some_function) 4)

или

F(n) = lambda (x)->(x+n)
a(q) = F(sin(1/q))
b(q) = F(cos(1/q))
c(q) = F(tg(1/q))

Это ж как бы основы...

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

Угу, 4 страницы, а прямого ответа на простой вопрос нету.

Как же нету? Мы ведь один и тот же текст читаем?

Всё вокруг да около, сто раз дураком назвали,

Интересно, почему?

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

Нет конечно, с чего бы?

Ну собственно это я и хотел узнать. Значит лямбда в C# и пр - не мегафича, а унылая хрень, которая есть в куче языков давным-давно.

Тебе уже объяснили не раз, что лямбда тут не при чем.

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

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

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

Нет. Потому что ты не осилил, что такое лямбды.

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

Я даже перефразирую. Где здесь генерация функции, «которую никто в коде явно не писал»?

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

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

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

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

И где здесь кодогенерация?

Без понятия.

В учебнике написано - «результатом будет _новая_ функция».

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

В get the facts про C# написано «в отличии от языка X в С# есть лямбда !!!111пыщьпыщь!!!»

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

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

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

А второе какое? :D И еще, что это за нах@#й - «генерация функций». Лямбда - это выражение (expression), возвращающее объект-функцию.

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

зря. ща хлынет новая волна, вызванная переключением контекста.

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

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

В чём тупость?

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

Я чо-то уже нихера не понимаю. Можно изъясняться нормально и просто написать в чём же я ошибаюсь?

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

возвращающее объект-функцию.

Зашибись! Хоть одна лямбда в каком-нибудь языке возвращает ли реально _функцию_? Или возвращаются всегда всякие ссылки на объекты, указатели на чо-нибудь, прочая ботва, что угодно, кроме собственно новой функции?

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

Зашибись! Хоть одна лямбда в каком-нибудь языке возвращает ли реально _функцию_? Или возвращаются всегда всякие ссылки на объекты, указатели на чо-нибудь, прочая ботва, что угодно, кроме собственно новой функции?

Это и есть функции.

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

В реальности, как минимум в старых языках типа lisp
в старых языках типа lisp

Муахаха

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

И эти люди советуют в треде «ознакомиться с основами ФП».

В get the facts про C#
в учебнике написано - код генерят и всё такое
Оказалось - хрен там, одно унылое говно
да и то в качестве костыля.

Это об анонимных костылях-функциях, генерящих *код* люди теперь узнают из гет зе фактс, куда катится мир.

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

Функций, а не кода.

Это как? Расскажите процессору какому-нибудь, про то, что функция - это не код.

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

В учебнике написано - «результатом будет _новая_ функция».

ну да, все верно.

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

это пиздец, дорогая редакция. Ты когда y=sin(x) пишешь, тоже новый «y» в коде ожидаешь увидеть, или «старый используются житрожопым образом»?

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

Это и есть функции.

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

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

Ты когда y=sin(x) пишешь, тоже новый «y» в коде ожидаешь увидеть

Я ожидаю что в результате процессор исполнит код который вычислит sin(x) и поместит результат в y.

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

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

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

Процессор ничего не знает о функциях. Сходика-ты читкани матчастьца.

Т.е. функция - отдельно, а как процессор работает и чего с циферками делает - это отдельно.

Зашибись я узнаю на старости лет новости.

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

Функции — это и есть «умозрительные абстракции». В любом языке.

Т.е. когда функция, например в C, компилятором превращается в команды процессора, то эти команды сразу перестают быть функцией?

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

В чём тупость?

в башке твоей тупой, очевидно.

Лямбду нельзя использовать для генерации функций?

В том сысле, который ты вкладываешь — нет, нельзя

Учебники врут?

нет, просто ученик дебил

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

Зашибись! Хоть одна лямбда в каком-нибудь языке возвращает ли реально _функцию_?

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

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

А в каком виде, по-твоему, должна возвращаться «новая функция»?

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

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

Бывает. А мог бы раньше узнать.

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

Т.е. когда функция, например в C, компилятором превращается в команды процессора, то эти команды сразу перестают быть функцией?

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

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

А в каком виде, по-твоему, должна возвращаться «новая функция»?

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

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

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

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

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

ну так другая функция и возвращается, что неясно-то?

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

Ну потому как все упомянутые корявые варианты уже есть

Пару примеров «корявых» вариантов приведи?

то наверно новшеством и продвинутой фичей будет прямая реализация слов из учебника

WAT? o_O

про _another_ _function_?

Чем _another_ отличается от _new_ расскажешь?

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

Вот ответь пожалуйста еще на такой вопрос, кто тебе сказал что «lisp - старый язык», сам же ты не мог такое придумать, правда?

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

И эти 2 мира никак не связаны друг-с-другом?

Ок, я тебе открою секрет. Между этими мирами существуют порталы, неведомые простым смертным. Называются «трансляторы».

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

:} Наверное в виде char x86_code[array_size]

Ну хотя бы так. Только ещё потом int (new_func*)(int); new_func = x86_code; func(x); Хоть какое-то новшество будет.

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

Вот ответь пожалуйста еще на такой вопрос, кто тебе сказал что «lisp - старый язык»

Он вообще-то в 60-х появился. Или я опять чего-то не понимаю, и lisp изобрели недавно, как какой-нибудь C#?

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

Ок, я тебе открою секрет. Между этими мирами существуют порталы, неведомые простым смертным. Называются «трансляторы».

И эти «трансляторы» изничтожают функции написанные программистами в /dev/null и скармливают процессорам какой-то совершенно левый набор команд?

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

Вот ответь пожалуйста еще на такой вопрос, кто тебе сказал что «lisp - старый язык», сам же ты не мог такое придумать, правда?

Не ну чисто по возрасту-то это так. Зато как удобно троллить «новые» языки.

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

man CL, man racket, man clojure. Угу, все прям мхом поросло. Но на вопрос ты так и не ответил: кто тебе об этом сказал, в универе или на работе?

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

И эти «трансляторы» изничтожают функции написанные программистами в /dev/null и скармливают процессорам какой-то совершенно левый набор команд?

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

Кто тебе и где обещал тебе, что в нём будут какие-то «функции»? Кто бы ни был этот человек, он тебя обманул.

// Блин, чувствую себя Капитаном, изрекающим, что Земля круглая, а Москва — столица РФ...

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

лямбда там была с рождения.

И да, мне не нужен кто-либо, чтобы оценить возраст ЯП.

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

ичо? «А правда, что низкопрофильные шины дают какое-то приемущество, или это модное название древнего колеса?»

Ну если так ставить вопрос, то всякие СиШарпы и Питоны еще даже до колеса не эволюционировали.

geekless ★★
()
Последнее исправление: geekless (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.