Лисп - это динамически типизированный язык, примерно ли это соответствует нетипизированному лямбда-исчислению?
Да, но только приблизительно. В «чистом» нетипизированном лямбда-исчислении все закодировано как функции. (Вы можете поискать в Google популярную «церковную кодировку» и менее популярную «кодировку Скотта».) Lisp имеет нефункциональные данные, такие как атомы, числа и т. Д., Так что это будет считаться «нетипизированным лямбда-исчислением, расширенным константами». 1005 *
Другое важное отличие заключается в порядке оценки . Правила сокращения членов лямбда-исчисления в высшей степени недетерминированы. (Существует теорема, теорема Черча-Россера, в которой свободно сказано, что до тех пор, пока вещи заканчиваются, порядок оценки не имеет значения.) На практике лямбда-члены обычно сокращаются с использованием крайнего левого крайнего значения, известного как сокращение «нормального порядка», потому что если любая стратегия сокращения заканчивается, что каждый делает.
Это очень отличается от Lisp, который всегда оценивает аргументы в нормальной форме перед выполнением бета-редукции. Этот порядок оценки называется «вызов по значению».
Таким образом, Lisp соответствует нетипизированному лямбда-исчислению с вызовом по значению, расширенному с помощью констант .