LINUX.ORG.RU
ФорумTalks

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

 , ,


7

7

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

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

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

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

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

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

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

Т.е. получить список факториалов на маке или винде уже не получится?

нет, glib работает только линуксе, и только на ядрах от 3.5 и выше

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

потому-что посчитай факториал от 100 своей программой на своём лиспе, и удивись, она тоже считает неправильно

Посчитал, считает правильно. ЧЯДНТ?

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

Нет, C#
Хотя анонимные функции и похожи, но
var join = from a in arr1
join b in arr2 on a equals b
where j>5
select a;
работать не будет.

Вроде индус какой-то пытался сделать аналог linq2object но до релиза дело не дошло.

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

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

Вам же сказали что не только. Если вы о:

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

Я приводил несколько приводил несколько примеров на C#, вот один из них

Func<int,int,int> add = (x,y) => x+y;
 Func<int, int, int> div = (x, y) => x / y;
 Func<Func<int, int, int>, Func<int, int, int>> curOp = x => (y, z) => x(y, z);

 var curAdd = curOp(add);
 var curDiv = curOp(div);

 System.Console.WriteLine("curAdd(10,2) {0}", curAdd(10, 2));
 System.Console.WriteLine("curDiv(10,2) {0}", curDiv(10, 2));
Покажите фильтры, пожалуйста.

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

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

А что кроме?

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

Какое отношение это имеет к моему ответу?

Учитывая, что ваш ответ не имеет никакого отношения к моему вопросу, а составлен в варианте лозунга, то...
Standard Query Operators, Language extensions - что из этого нельзя сделать на макросах и функциях высшего порядка?

Вы эти слова часто слышите?

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

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

Standard Query Operators: While, When, Sum, etc
Language extensions- боле объёмный топик, imho лучше почитать в вики.
Были добавлены неявно типизированные переменные, анонимные типы, extension методы, lambda expression и expression trees
Т.е. на самом деле язык был расширен достаточно сильно но без ломки .

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

Последний раз, наверное: _все_ из вышеперечисленного можно сделать на макрах кроме, возможно, неявной типизации => этот ваш LINQ - сахарок для ФВП.

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

Вы о чём?
Кто такие макры?
Почму вы считаете, что на них можно сделать анонимные типы, extension методы, lambda expression и expression trees ?
Я, кстати не все перечислил и попросил прочитать вики для полноты.

этот ваш LINQ - сахарок для ФВП.

Что это такое?

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

Сравни свой вариант по читабельности с лисповым ;)

Мой вариант отлично читается. Лисповый — гораздо хуже. АПВС?

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

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

То есть я могу в php использовать идентификаторы, неизвестные транслятору? Я вижу, ты всё еще под кокосом. Эпичный слив.

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

Тогда давай уж я на пхп перейду? ОК? там тоже ничего определять не надо, а тамошний массив может работать как FIFO

А давай ты НЕ БУДЕШЬ переходить на пхп, а всё таки ответишь на вопрос, который сам и задал:

Си и лисп — где букв меньше, и код понятнее?

Или опять сольёшься?

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

Мой вариант отлично читается.

Дооо

Лисповый — гораздо хуже.

Лисповый читается как математическое выражение или как поэзия со скобками

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

Функции в ФП больше НИЧЕГО не делают и не имеют побочных эффектов. Я НЕ говорю, что это плохо. Это классная фича ФП. Вот только это НЕ всегда хорошо. Потому нужен костыль - замыкание.

Замыкания — костыль? А свободные переменные в лямбда-исчислении — это тоже костыль?

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

То-то сейчас замыкания есть во всех современных ЯП высокого уровня, а от (изменяемого) глобального состояния стараются отказаться в пользу удобства и простоты разработки и отладки конкурентных программ.

В лиспе - да. Там всё на функциях, даже циклы.

В Common Lisp'е? Говорить такое о языке, в котором нет гарантии TCO, — это что-то.

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

Ну так ответьте на вопрос

Почeму вы считаете, что на них можно сделать анонимные типы, extension методы, lambda expression и expression trees ?

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

В коде:

Func<int,int,int> add = (x,y) => x+y;
Func<int, int, int> div = (x, y) => x / y;
Func<Func<int, int, int>, Func<int, int, int>> curOp = x => (y, z) => x(y, z);
var curAdd = curOp(add);
var curDiv = curOp(div);

System.Console.WriteLine("curAdd(10,2) {0}", curAdd(10, 2));
System.Console.WriteLine("curDiv(10,2) {0}", curDiv(10, 2));

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

Кстати, не нашёл ФВП в вики.
Может кто-то объяснит что собеседник имел в виду, и почему обиделся?

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

Лисповый читается как математическое выражение

Отличное сравнение! Математические выражения как раз обладали бы ужасной читабельностью, если бы были записаны так, как записывают код на лиспе. К счастью, математические выражения записывают совсем иначе.

или как поэзия со скобками

Гуманитарии ITT.

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

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

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

Почeму вы считаете, что на них можно сделать анонимные типы, extension методы, lambda expression и expression trees ?

А что в этом принципиально сложного?

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

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

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

Почeму вы считаете, что на них можно сделать анонимные типы, extension методы, lambda expression и expression trees ?

А что в этом принципиально сложного?

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

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

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

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

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

О функциях высшего порядка вики не знает? о_О Tell me moar

Sure.
Just when you learn language, I will.

Could you give me reference in wiki to ФВП or it is just your invention?

You could use «functor» when you want a shorter form, however you invented new math term.
It is so exiting!

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

Было лень идти проверять код, но все обработается.

=> (defn factorial [n] (apply #'* (range 1 (+ n 1))))
#'user/factorial
=> (map #'factorial (range 0 6))
(1 1 2 6 24 120)
Потому что
=> (apply #'* ())
1

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

Не пори чушь

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

факториал на лиспе - декомпозиция функций

Какая неожиданность! А теперь посмотри и на reduce(&:*) и включи мозг. Давай, я в тебя верю.

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

Пациент уже окончательно теряет человеческий облик на почве летающих в глазах лиспосмайликов.

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

Опа!
Шанс нельзя упустить.
Утверждяю:
В C# на макрах нельзя реализовать: анонимные типы, extension методы, lambda expression и expression trees

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

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

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

А руби - нечитабельное г-но.

Баттхерт-то умерь, а то скоро как drBatty окончательно уедешь в амфетаминовый рай.

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

>> О функциях высшего порядка вики не знает? о_О Tell me moar
> Sure.
> Could you give me reference in wiki to ФВП or it is just your invention?

http://ru.wikipedia.org/wiki/Функция_высшего_порядка

За одним просветись и на счет функтора http://ru.wikipedia.org/wiki/Функтор_(программирование)

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

В C# на макрах нельзя реализовать: анонимные типы, extension методы, lambda expression и expression trees
В C#

Этот недоязычок никого не интересует

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

Хехе
лангуага никакая?
Я спрашивал о сокращении.
ФВП в вики отсутствует.
Т.е. сокращение - ваше изобретение

За одним просветись и на счет функтора http://ru.wikipedia.org/wiki/Функтор_(программирование)

wiki:In mathematics and computer science, a higher-order function (also functional form, functional or functor) is a function ....

Так что учите неруские языки. Полезно.

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

Этот недоязычок никого не интересует

Аха.
Т.е. как я и писал:

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

Вы сливаете.
Не буду больше беспокоить.

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

Хехе
лангуага никакая?
Я спрашивал о сокращении.
ФВП в вики отсутствует.
Т.е. скаращение - ваше изобретение

Мозгов для использования поиска уже не хватает? www.linux.org.ru/search.jsp?q=фвп&oldQ=&range=ALL&interval=ALL&am...

Так что учите неруские языки. Полезно.

Я знаю языков больше, чем ты когда либо сможешь осилить за свою жизнь.

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