Это читаемей, особенно для «хакаемых» языков программирования. Вот смотри: есть у тебя в программе
(+ a b)
Какой-то программист вместо a напишет тучу еще списков, а другой — вместо b. И оно красивенько перенесется и отформатируется. А в случае a + b это превратится в мусор.
Велосипед не изобретали, изобрели принцип функционального языка. В таком языке + это не оператор, а процедура (функция), и ей передаются параметры 1 и 2
На самом деле стиль записи выражений в lisp очень удобен именно когда необходимы большие вычисления. Нет необходимости создавать кучи временных переменных и выражения пишутся в виде:
(+ (f1)
(f2)...)
Правда всё-таки к этому надо какое-то время привыкать + иметь редактор автоматической расстановок отступов и подсветкой парных скобок.
Вообще-то польская нотация это запись в стиле 4 5 6 * + что значит 5*6 + 4. Применяется в forth и других стековых языках.
Только одно (и главное) не объяснено — зачем нужны лямбды, и что это вообще такое (за исключением, что это просто анонимные функции в Схеме/Лиспе). Применение их уходит в лямбда исчисление, где основным фактом является не анонимность функции, а именно функциональный подход, когда функции являются функциональными аргументами («Фунаргами», «Funarg») и функциональными значениями (здесь имя функции, действительно, не является важным).
Разделение на именованные и анонимные функции — это лишь последствие привнесения лямбда-исчисления. Поскольку первые больше относятся к процедурному стилю (хотя и могут быть использованы в качестве фунаргов и функциональных значений).
Хорошее видео, новичкам пригодится, когда будете делать следующее (а я надеюсь будете), повнимательнее отнеситесь к вопросу «а зачем оно надо». Много хороших примеров есть в sicp.
На мой взгляд, не получилось. Ведь по сути использование анонимных функций сводится к 2 случаям:
1) построение процедур высшего порядка, где для элементарных процедур, передаваемых как параметры, не имеет смысла создавать именованую функцию, для создания замыканий
2) для создания локальных состояний (в scheme правда для этого есть синтаксический сахар — let), которые далее могут быть использованы в теле функции.
Зачем в вашем примере с double вы вкладывате вызовы именованой функции через lambda? Чем это оправданно?
Вы привели два самых стандартных случая, но анонимные функции можно использовать для хранения данных. Например, лямбдой можно представить пару (pair). И даже для создания классов и мета-классов в функциональном языке.
>Зачем в вашем примере с double вы вкладывате вызовы именованой функции через lambda?
>Чем это оправданно?
Хотелось показать, что лямбда ничем не отличается от любой функции, что она ей и является, и как и любая другая функция, может возвращать значения, которые потом пойдут на инпут другим лямбдам.
)) Думаю, что автор топика делает скринкасты лучше. Буду учится.
Согласен с «будят интерес к функциональному программированию», но это такие азы, что даже не кажутся таковыми.
Блин, где же наш советский фундаментальный подход к таким вещам.
Что такое лямбда?