Как работает лямбда-функция в lisp?

В книге Land of Lisp я прочитал, что лямбда-функция является единственной встроенной функцией. Однако я не совсем понимаю, как это возможно, потому что я думал, что вам, по крайней мере, понадобится одна команда для сложения, одна для сравнения чисел и одна для перемещения данных из одной переменной в другую. Мне было интересно, может ли кто-нибудь объяснить мне, как это делает Лисп. Я не математик, поэтому, если это возможно, не могли бы вы также объяснить это без большого количества сложной математики?

3 ответа

То, что здесь говорит "Земля Лисп", не lambda является единственным примитивом Лиспа, но, скорее, что (согласно лямбда-исчислению Алонзо Черча, которое Лисп имеет теоретические основы), можно реализовать остальную часть Лисп с lambda, поскольку лямбда-исчисление эквивалентно универсальной машине Тьюринга.

Для большинства практических применений, lambda используется для определения анонимных функций

В этом разница между теорией и реальным языком программирования.

Лисп взял идеи из Лямбда-исчисления, но не реализовал их. Лямбда-исчисление описывает систему для выполнения расчетов с использованием функций. Полезно понимать Lambda Calculus, но вы не будете программировать на чистом Lambda Calculus, когда используете Lisp.

Как язык программирования, Лисп имеет все виды типов данных и операций для них (числа, строки, символы, консольные ячейки, символы, функции, ...).

Сравните это с машинами Тьюринга и чем-то вроде языка программирования C.

Вы путаете некоторые вещи здесь. lambda это не функция. Это конструкция, встроенная в язык Lisp.

Любой практический Лисп будет иметь много встроенных функций; это нужно как минимум car а также cdr разделять списки, и некоторые примитивные арифметические функции не могут быть определены в терминах других функций.(*) Кроме того, "нефункциональные" части Lisp, такие как setf нужны примитивы.

[*] Вы можете делать церковную арифметику на Лиспе, но тогда вы не можете красиво распечатать результаты из-за системы типов Lisp но можете ли вы правильно напечатать результат, зависит от варианта Lisp.

Другие вопросы по тегам