Как работает лямбда-функция в lisp?
В книге Land of Lisp я прочитал, что лямбда-функция является единственной встроенной функцией. Однако я не совсем понимаю, как это возможно, потому что я думал, что вам, по крайней мере, понадобится одна команда для сложения, одна для сравнения чисел и одна для перемещения данных из одной переменной в другую. Мне было интересно, может ли кто-нибудь объяснить мне, как это делает Лисп. Я не математик, поэтому, если это возможно, не могли бы вы также объяснить это без большого количества сложной математики?
3 ответа
То, что здесь говорит "Земля Лисп", не lambda
является единственным примитивом Лиспа, но, скорее, что (согласно лямбда-исчислению Алонзо Черча, которое Лисп имеет теоретические основы), можно реализовать остальную часть Лисп с lambda
, поскольку лямбда-исчисление эквивалентно универсальной машине Тьюринга.
Для большинства практических применений, lambda
используется для определения анонимных функций
В этом разница между теорией и реальным языком программирования.
Лисп взял идеи из Лямбда-исчисления, но не реализовал их. Лямбда-исчисление описывает систему для выполнения расчетов с использованием функций. Полезно понимать Lambda Calculus, но вы не будете программировать на чистом Lambda Calculus, когда используете Lisp.
Как язык программирования, Лисп имеет все виды типов данных и операций для них (числа, строки, символы, консольные ячейки, символы, функции, ...).
Сравните это с машинами Тьюринга и чем-то вроде языка программирования C.
Вы путаете некоторые вещи здесь. lambda
это не функция. Это конструкция, встроенная в язык Lisp.
Любой практический Лисп будет иметь много встроенных функций; это нужно как минимум car
а также cdr
разделять списки, и некоторые примитивные арифметические функции не могут быть определены в терминах других функций.(*) Кроме того, "нефункциональные" части Lisp, такие как setf
нужны примитивы.
[*] Вы можете делать церковную арифметику на Лиспе, но тогда вы не можете красиво распечатать результаты из-за системы типов Lisp но можете ли вы правильно напечатать результат, зависит от варианта Lisp.