Pull to refresh

Comments 26

Зачем изобретать велосипед неужели (+ 1 3) это понятней?
ну как же: (+ 1 2 3 4 5 6) — как минимум компактнее, чем 1 + 2 + 3 + 4 + 5 + 6
UFO just landed and posted this here
UFO just landed and posted this here
А как насчёт записи 1 2 3 4 5 6 + как в Forth?

В forth аналогичная конструкция это 1 2 3 4 5 6 + + + + +

Это читаемей, особенно для «хакаемых» языков программирования. Вот смотри: есть у тебя в программе
(+ a b)

Какой-то программист вместо a напишет тучу еще списков, а другой — вместо b. И оно красивенько перенесется и отформатируется. А в случае a + b это превратится в мусор.
(+ 1 3) — это вызов функции "+" с аргументами 1 и 3. "+" это не оператор, это такая же процедура как и inc или single.
Хммм, если я не ошибаюсь, но изобретать велосипеды этой области годах эдак в 1960-ых вполне себе адекватно.

А вообще смысл такого «извращения» — написание кода в AST, что как итог сильно упрощает метопрограммирование…
Велосипед не изобретали, изобрели принцип функционального языка. В таком языке + это не оператор, а процедура (функция), и ей передаются параметры 1 и 2
Спасибо, уяснил что есть лямбда :) Приятный голос, позитивный урок.

А польская запись действительно непонятна пока к ней не привыкнешь, особенно когда большое количество действий.
На самом деле стиль записи выражений в lisp очень удобен именно когда необходимы большие вычисления. Нет необходимости создавать кучи временных переменных и выражения пишутся в виде:
(+ (f1)
(f2)...)
Правда всё-таки к этому надо какое-то время привыкать + иметь редактор автоматической расстановок отступов и подсветкой парных скобок.

Вообще-то польская нотация это запись в стиле 4 5 6 * + что значит 5*6 + 4. Применяется в forth и других стековых языках.
И в инженерных калькуляторах :)

Просто, живо, и понятно. Молодец =)

Только одно (и главное) не объяснено — зачем нужны лямбды, и что это вообще такое (за исключением, что это просто анонимные функции в Схеме/Лиспе). Применение их уходит в лямбда исчисление, где основным фактом является не анонимность функции, а именно функциональный подход, когда функции являются функциональными аргументами («Фунаргами», «Funarg») и функциональными значениями (здесь имя функции, действительно, не является важным).

Разделение на именованные и анонимные функции — это лишь последствие привнесения лямбда-исчисления. Поскольку первые больше относятся к процедурному стилю (хотя и могут быть использованы в качестве фунаргов и функциональных значений).
Не даром программирование на лиспе называют искусством. Не видел ни одного топика о нём, который был бы не в видеоформате :)
Хорошее видео, новичкам пригодится, когда будете делать следующее (а я надеюсь будете), повнимательнее отнеситесь к вопросу «а зачем оно надо». Много хороших примеров есть в sicp.
А почему нельзя просто:
(define (double f)
  (lambda (x) (f (f x))))
возник тот же вопрос. да и
(define (single f) f)

не? =)
Можно, просто хотелось показать лямбду со всех сторон.
На мой взгляд, не получилось. Ведь по сути использование анонимных функций сводится к 2 случаям:
1) построение процедур высшего порядка, где для элементарных процедур, передаваемых как параметры, не имеет смысла создавать именованую функцию, для создания замыканий
2) для создания локальных состояний (в scheme правда для этого есть синтаксический сахар — let), которые далее могут быть использованы в теле функции.
Зачем в вашем примере с double вы вкладывате вызовы именованой функции через lambda? Чем это оправданно?
Вы привели два самых стандартных случая, но анонимные функции можно использовать для хранения данных. Например, лямбдой можно представить пару (pair). И даже для создания классов и мета-классов в функциональном языке.

>Зачем в вашем примере с double вы вкладывате вызовы именованой функции через lambda?
>Чем это оправданно?

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

Спасибо за труд, но думаю, что уровень знаний слишком начальный. Нет уверенности, что такое знание должно выпускаться в свет.
Уверен, скоро мы увидим ваш видео мастер-класс. От мэтра, так сказать )

Фритонику спасибо за старания. Твои труды, как минимум, будят интерес к функциональному программированию.
)) Думаю, что автор топика делает скринкасты лучше. Буду учится.
Согласен с «будят интерес к функциональному программированию», но это такие азы, что даже не кажутся таковыми.
Блин, где же наш советский фундаментальный подход к таким вещам.
Кхм, у азбуки уровень знаний тоже очень начальный.
Sign up to leave a comment.

Articles