Верно ли, что Lisp не является функциональным языком программирования?
Я читал в книге: "Создатели программ", интервью с Гвидо ван Россом говорит:
Более фундаментальное свойство Python, совместно использующее Lisp (а не функциональный язык!) - это то, что функции являются первоклассными объектами...
Итак, Lisp является не языком функционального программирования?
Неужели Гвидо ошибается? Что это значит?
Ответы
Ответ 1
Практически каждый Lisp, который я знаю, может использоваться для программирования в функциональном стиле (все, что вам действительно нужно, это первоклассные функции, в конце концов!)
Однако Lisps больше похож на многоязычные инструментальные средства: вы можете выполнять функциональное программирование, ООП, логическое программирование, определять свой собственный DSL для какой-то странной новой парадигмы и т.д.
Lisp, который, вероятно, ближе всего к функциональному стилю программирования, Clojure (он имеет ленивую оценку, обескураживает ООП, использует неизменные структуры данных во всем, ограничивает неконтролируемую мутацию (через STM), имеет довольно много чистых/функции более высокого порядка в основной библиотеке и т.д.)
Ответ 2
Существуют языки, которые позволяют и поощряют парадигмы функционального программирования. Среди них и Python, и Lisp. Lisp, в частности, был первым, кто применил теоретические концепции, полученные из лямбда-исчисления. В конце 1950-х годов, когда существовали почти только FORTRAN и Lisp, Lisp был выделен как функциональный, где FORTRAN с полностью статическим управлением памятью никогда не считался функциональным.
Однако ни Python, ни Lisp не применяют чистую функциональность, позволяя изменять переменные, состояния и императивные конструкции. Смешение стилей всегда может быть полезно на практике, поэтому, вероятно, вы не найдете много примеров чистых понятий в очень успешных инструментах.
Среди чисто функциональных языков, Haskell, Clean и Miranda приведены примеры, но я ничего не могу сказать о них.