Как работает лямбда-функция в lisp? - PullRequest
3 голосов
/ 03 января 2012

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

Ответы [ 3 ]

6 голосов
/ 10 января 2012

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

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

5 голосов
/ 03 января 2012

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

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

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

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

3 голосов
/ 03 января 2012

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

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

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

...