Comments 26
Зачем изобретать велосипед неужели (+ 1 3) это понятней?
ну как же: (+ 1 2 3 4 5 6) — как минимум компактнее, чем 1 + 2 + 3 + 4 + 5 + 6
UFO just landed and posted this here
Это читаемей, особенно для «хакаемых» языков программирования. Вот смотри: есть у тебя в программе
(+ a b)
Какой-то программист вместо a напишет тучу еще списков, а другой — вместо b. И оно красивенько перенесется и отформатируется. А в случае a + b это превратится в мусор.
(+ a b)
Какой-то программист вместо a напишет тучу еще списков, а другой — вместо b. И оно красивенько перенесется и отформатируется. А в случае a + b это превратится в мусор.
(+ 1 3) — это вызов функции "+" с аргументами 1 и 3. "+" это не оператор, это такая же процедура как и inc или single.
Хммм, если я не ошибаюсь, но изобретать велосипеды этой области годах эдак в 1960-ых вполне себе адекватно.
А вообще смысл такого «извращения» — написание кода в AST, что как итог сильно упрощает метопрограммирование…
А вообще смысл такого «извращения» — написание кода в AST, что как итог сильно упрощает метопрограммирование…
Велосипед не изобретали, изобрели принцип функционального языка. В таком языке + это не оператор, а процедура (функция), и ей передаются параметры 1 и 2
Спасибо, уяснил что есть лямбда :) Приятный голос, позитивный урок.
А польская запись действительно непонятна пока к ней не привыкнешь, особенно когда большое количество действий.
А польская запись действительно непонятна пока к ней не привыкнешь, особенно когда большое количество действий.
На самом деле стиль записи выражений в lisp очень удобен именно когда необходимы большие вычисления. Нет необходимости создавать кучи временных переменных и выражения пишутся в виде:
(+ (f1)
(f2)...)
Правда всё-таки к этому надо какое-то время привыкать + иметь редактор автоматической расстановок отступов и подсветкой парных скобок.
Вообще-то польская нотация это запись в стиле 4 5 6 * + что значит 5*6 + 4. Применяется в forth и других стековых языках.
(+ (f1)
(f2)...)
Правда всё-таки к этому надо какое-то время привыкать + иметь редактор автоматической расстановок отступов и подсветкой парных скобок.
Вообще-то польская нотация это запись в стиле 4 5 6 * + что значит 5*6 + 4. Применяется в forth и других стековых языках.
Просто, живо, и понятно. Молодец =)
Только одно (и главное) не объяснено — зачем нужны лямбды, и что это вообще такое (за исключением, что это просто анонимные функции в Схеме/Лиспе). Применение их уходит в лямбда исчисление, где основным фактом является не анонимность функции, а именно функциональный подход, когда функции являются функциональными аргументами («Фунаргами», «Funarg») и функциональными значениями (здесь имя функции, действительно, не является важным).
Разделение на именованные и анонимные функции — это лишь последствие привнесения лямбда-исчисления. Поскольку первые больше относятся к процедурному стилю (хотя и могут быть использованы в качестве фунаргов и функциональных значений).
Только одно (и главное) не объяснено — зачем нужны лямбды, и что это вообще такое (за исключением, что это просто анонимные функции в Схеме/Лиспе). Применение их уходит в лямбда исчисление, где основным фактом является не анонимность функции, а именно функциональный подход, когда функции являются функциональными аргументами («Фунаргами», «Funarg») и функциональными значениями (здесь имя функции, действительно, не является важным).
Разделение на именованные и анонимные функции — это лишь последствие привнесения лямбда-исчисления. Поскольку первые больше относятся к процедурному стилю (хотя и могут быть использованы в качестве фунаргов и функциональных значений).
Не даром программирование на лиспе называют искусством. Не видел ни одного топика о нём, который был бы не в видеоформате :)
Хорошее видео, новичкам пригодится, когда будете делать следующее (а я надеюсь будете), повнимательнее отнеситесь к вопросу «а зачем оно надо». Много хороших примеров есть в sicp.
А почему нельзя просто:
(define (double f) (lambda (x) (f (f x))))
возник тот же вопрос. да и
не? =)
(define (single f) f)
не? =)
Можно, просто хотелось показать лямбду со всех сторон.
На мой взгляд, не получилось. Ведь по сути использование анонимных функций сводится к 2 случаям:
1) построение процедур высшего порядка, где для элементарных процедур, передаваемых как параметры, не имеет смысла создавать именованую функцию, для создания замыканий
2) для создания локальных состояний (в scheme правда для этого есть синтаксический сахар — let), которые далее могут быть использованы в теле функции.
Зачем в вашем примере с double вы вкладывате вызовы именованой функции через lambda? Чем это оправданно?
1) построение процедур высшего порядка, где для элементарных процедур, передаваемых как параметры, не имеет смысла создавать именованую функцию, для создания замыканий
2) для создания локальных состояний (в scheme правда для этого есть синтаксический сахар — let), которые далее могут быть использованы в теле функции.
Зачем в вашем примере с double вы вкладывате вызовы именованой функции через lambda? Чем это оправданно?
Вы привели два самых стандартных случая, но анонимные функции можно использовать для хранения данных. Например, лямбдой можно представить пару (pair). И даже для создания классов и мета-классов в функциональном языке.
>Зачем в вашем примере с double вы вкладывате вызовы именованой функции через lambda?
>Чем это оправданно?
Хотелось показать, что лямбда ничем не отличается от любой функции, что она ей и является, и как и любая другая функция, может возвращать значения, которые потом пойдут на инпут другим лямбдам.
>Зачем в вашем примере с double вы вкладывате вызовы именованой функции через lambda?
>Чем это оправданно?
Хотелось показать, что лямбда ничем не отличается от любой функции, что она ей и является, и как и любая другая функция, может возвращать значения, которые потом пойдут на инпут другим лямбдам.
Спасибо за труд, но думаю, что уровень знаний слишком начальный. Нет уверенности, что такое знание должно выпускаться в свет.
Уверен, скоро мы увидим ваш видео мастер-класс. От мэтра, так сказать )
Фритонику спасибо за старания. Твои труды, как минимум, будят интерес к функциональному программированию.
Фритонику спасибо за старания. Твои труды, как минимум, будят интерес к функциональному программированию.
Кхм, у азбуки уровень знаний тоже очень начальный.
Sign up to leave a comment.
Что такое лямбда?